我有一个不允许更改的 C 源文件,它的定义如下:
int main(int argc, char *argv[])
{
//doing something
return 0
}
void __magic()
{
__asm__("jmp %esp");
}
我的代码中没有使用 __magic 函数,它只是在 main 之后声明。 我希望找到函数__magic的地址。 如何才能做到这一点而不必在 main 之前声明函数? 我使用 gdb 进行调试。
附注 我还想知道这个函数是否保存在我的进程内存中,因为没有声明/使用它。编译器可能不会添加该函数吗?
最佳答案
您需要澄清“查找函数 __magic
的地址”到底是什么意思。如果您只想查看地址是什么(即不在代码中使用它),那么您可以使用 objdump 来显示符号值。
但是,如果您在编译时需要该地址,则没有简单的方法可以做到这一点。无法保证编译器会按任何特定顺序放置函数的代码,即使这样做,函数之间也可能存在未知数量的填充。由于您使用的是 %esp
,我假设您的目标是 32 位 x86 - 如果您的目标是 64 位,那么您还必须担心 ASLR。
关于c - 访问 main 之后定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443326/