如何在运行时在C语言中访问解释器路径地址?

问题描述

通过使用objdump命令,我发现内存中的地址0x02a8包含起始路径/lib64/ld-linux-x86-64.so.2,并且该路径以0x00字节结尾,这是由于C标准。

因此,我试图编写一个简单的C程序来打印此行(我使用了Denis Yurichev的“ RE for Beginners”一书中的示例-第24页):

#include <stdio.h>

int main(){
    printf(0x02a8);
    return 0;
}

但是我对于遇到分段错误而不是预期的/lib64/ld-linux-x86-64.so.2输出感到失望。

使用printf这样的“快速”调用而没有指定符或至少没有指针强制转换,我感到很奇怪,因此我尝试使代码更加自然:

#include <stdio.h>

int main(){
    char *p = (char*)0x02a8;
    printf(p);
    printf("\n");
    return 0;
}

运行此命令后,我仍然遇到细分错误。

我不认为这是由于内存区域有限而发生的,因为在本书中,第一次尝试就一切顺利。我不确定,也许那本书中没有提到更多。

因此,需要对每次我尝试运行该程序时为什么会不断发生分段错误的原因进行清楚的解释。

我正在使用最新的完全升级的Kali Linux版本。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)