gpt4 book ai didi

c - 访问 main 之后定义的函数

转载 作者:行者123 更新时间:2023-11-30 21:10:49 25 4
gpt4 key购买 nike

我有一个不允许更改的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com