C - 如何在代码段中创建模式以在内存转储中识别它?

psi*_*lia 4 c embedded assembly

我转储我的RAM(它的一部分 - 仅代码段),以便找到放置C函数的位置.我没有map文件,我不知道boot/init例程究竟是做什么的.

我将程序加载到RAM中,然后如果我转储RAM,很难找到确切的功能在哪里.我想在C源代码中使用不同的模式,以便在内存转储中识别它们.

我尝试使用包含函数名称的不同第一个变量来启动每个函数,例如:

char this_function_name[]="main";
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为此字符串将放在数据段中.

我有简单的16位RISC CPU和实验专有编译器(没有GCC或任何众所周知的).系统具有16Mb的RAM,与其他应用程序共享(引导加载程序,下载程序).几乎不可能找到一个独特的N NOP或smth序列.像0xABCD.我想在RAM中找到所有函数,所以我需要在RAM-dump中可见的唯一函数标识符.

什么是代码段的最佳模式?

Ric*_*ton 7

如果是我,我会使用符号表,例如"nm a.out | grep main".获取您想要的任何功能的真实地址.

如果你真的没有符号表,那就自己做吧.

struct tab {
    void *addr;
    char name[100];  // For ease of searching, use an array.
} symtab[] = {
    { (void*)main, "main" },
    { (void*)otherfunc, "otherfunc" },
};
Run Code Online (Sandbox Code Playgroud)

搜索名称,地址将紧接在其之前.转到地址.;-)