如何在 SylixOS 中获取地址

如何在 SylixOS 中获取地址

1、获取内核内存布局

BSP 的内存布局在链接脚本已经固化。可以参考 BSP 工程中对应链接文件,例如:

上图中可查出 TEXT 段和 DATA 段的基地址,分别为:
TEXT 0x10000000;
DATA 0x10600000;

2、获取内核模块基地址

1、使用 modules 命令(内核模块)

BASE 列为内存起始, SIZE 列为模块占用的内存大小。

2、使用程序获取
以下函数根据文件路径获取模块内存。
LW_API INT API_ModuleGetBase(pid_t pid, PCHAR pcModPath, addr_t *pulAddrBase, size_t *pstLen);  /* 获得模块装载基地址 */
如果想遍历系统模块,可以参考系统中__tshellModuleShow 函数代码。

3、获取变量地址
获取变量地址有以下限制:
不能获取函数局部变量地址;
不能获取驱动程序(ko 文件)变量地址;

3.1 获取操作系统中的变量地址

使用 nm 命令获取:
例如: 查找变量_G_vprocKernel
1. 
先使用命令 nm sylixos-bsp.elf > a.txt
2. 
打开 a.txt 搜索 _G_vprocKernel,查找到如下结果: 0176eaa0 B _G_vprocKernel
表明_G_vprocKernel 在 0x0176eaa0 内存位置。
注意:
nm 需要使用交叉编译工具链对应的 nm 命令。
例如: 
arm-sylixos-eabi-nm

3.2 获取应用程序和库文件变量地址

要应用程序或库文件变量地址,步骤如下:
1. 使用 modules 命令获取到模块起始地址,即 modules 命令中的 "BASE" 列;
2. 使用 nm 命令查找变量地址(同上 3.1 步骤)
3. 变量的内存地址为: nm 命令中获取到的地址 模块起始地址
举例如下:
程序源码
#include <stdio.h>
#include "sylixos-so.h"
int iGlobalVar = 0;
int main (int argc, char **argv)
{
int i;
for (i = 0; i < 100; i++) {
iGlobalVar ++;
printf("Hello SylixOS %d!\n", iGlobalVar);
lib_func();
sleep(1);
}
return (0);
}
查找 iGlobalVar 地址,首先查看模块起始地址

模块起始地址为 0xa27a000
nm sylixos-app > a.txt
在输出文件中查找 iGlobalVar
000053e0 B iGlobalVar
则 iGlobalVar 在内存中的地址为 0xa27a000 + 0x000053e0 = 0xA27F3E0

    • Related Articles

    • RealEvo-IDE 获取地址

      License 使用说明: License 和 RealEvo-IDE 版本没有直接关系。 如:license 可以激活 3.9.1 版本的 RealEvo-IDE,也能在 3.9.9、4.0.0 等版本上进行激活,但与 RealEvo-IDE 的使用权限有关。 如:License 第 3 位到第 4 位与版本的对应关系: 01--------体验 02--------专业 05--------旗舰 例:FF056D014001D8AB7360861762648A70 第三四位是 05 ...
    • 如何在 SylixOS 中执行脚本文件

      Q: 如何在 SylixOS 中执行脚本文件? 在 SylixOS  shell 下执行“shfile 脚本文件.h”,即可执行脚本文件内容。 示例:#shfile /etc/example.sh 参考文章:SylixOS 设置开机自动运行程序
    • 如何在 vmware 虚拟机中安装启动 SylixOS

      Q: 如何在 vmware 虚拟机中安装启动 sylixos。 首先需要安装 VMware 软件,并准备好 VMware 所需 SylixOS 的 x86 启动文件(在 IDE 原始安装包中有 VMware 文件)       启动流程: 将压缩包解压到本地; 打开 VMware 软件,在 VMware  选项卡选择 “文件” —> ‘’打开‘’; 在弹出窗口中选择解压后的 vmx 文件并点击确定,文件位置:“SylixOS VMware\SylixOS x86\SylixOS ...
    • IDE 中如何在固定的列显示竖线

      问:IDE 中如何在固定的列显示竖线? Window -> Prefences -> Text Editors -> show print margin 勾选上 -> columu:107 -> OK 更多 IDE 配置见: 参考文章:RealEvo-IDE 获取地址 参考文章:IDE 窗口布局介绍 参考文章:IDE 中如何高亮变量 参考文章:IDE 中如何按列编辑 参考文章:IDE 中如何显示特殊字符 参考文章:IDE 中如何屏蔽单个工程文件 参考文章:如何恢复 IDE 默认的窗口布局 ...
    • SylixOS 功能介绍及版本差异

      SylixOS功能介绍及版本差异 SylixOS 标准版 SylixOS 标准版是 SylixOS 的基础版本,具备如下功能: 兼容 IEEE 1003(ISO/IEC 9945)操作系统接口规范; 兼容 POSIX 1003.1b(ISO/IEC 9945-1)实时编程标准; 支持国军标 GJB7714-2012 操作系统接口规范; 优秀的实时性能(任务调度与切换算法时间复杂度为 O(1)); 支持无限多任务; 抢占式调度支持 256 个优先级; 支持虚拟进程; ...