【问题标题】:Difference between main and __libc_start_mainmain 和 __libc_start_main 之间的区别
【发布时间】:2019-10-23 11:56:34
【问题描述】:

我开始涉足逆向工程,正在使用 IDA Pro 并正在反汇编一个二进制文件。

我正在尝试查找我正在使用的 C 程序的 main 函数的内存地址。

但是,我看到 IDA 中有一个函数用于: main__libc_start_main

我看过this post,但恐怕我还是不明白。谁能帮我理解两者之间的区别,哪个是哪个?

谢谢!

【问题讨论】:

    标签: c disassembly decompiling ida


    【解决方案1】:

    首先调用__libc_start_main,然后调用main。前者是平台的一部分,会进行一些大多数人甚至没有意识到正在发生的初始化,例如准备线程系统。后者是用户程序的入口点,包含“常规”代码。

    【讨论】:

    • 例如,__libc_start_main 做的事情之一是链接任何include 文件,因为这发生在我的代码中的main 函数之前?
    • 不,动态链接库的加载发生在其他地方(但也在 main 之前)。
    • 你能举一个例子说明“......大多数人甚至没有意识到正在发生的事情。”,只是为了扩大答案,然后我可以接受 =)跨度>
    • 它可能会做一些其他重要的事情,比如初始化你的堆栈指针。如果main 返回,__libc_start_main 以返回值作为状态退出。
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2011-04-12
    • 2012-11-12
    • 2011-08-25
    • 2020-07-28
    相关资源
    最近更新 更多