GLOBAL__I_main function
GLOBAL__I_main function
我拆解了用C++编写的简单程序,有一个函数:
080486a8 <_GLOBAL__I_main>:
80486a8: 55 push %ebp
80486a9: 89 e5 mov %esp,%ebp
80486ab: 83 ec 18 sub $0x18,%esp
80486ae: c7 44 24 04 ff ff 00 movl $0xffff,0x4(%esp)
80486b5: 00
80486b6: c7 04 24 01 00 00 00 movl $0x1,(%esp)
80486bd: e8 a6 ff ff ff call 8048668 <_Z41__static_initialization_and_destruction_0ii>
80486c2: c9 leave
80486c3: c3 ret
80486c4: 90 nop
80486c5: 90 nop
80486c6: 90 nop
80486c7: 90 nop
80486c8: 90 nop
80486c9: 90 nop
80486ca: 90 nop
80486cb: 90 nop
80486cc: 90 nop
80486cd: 90 nop
80486ce: 90 nop
80486cf: 90 nop
这个功能是什么?为什么RET指令之后会有这么多NOP操作?
正如netrom所提到的,__static_initialization_and_destruction_0(int, int)
安排要调用的全局构造函数和析构函数。
许多编译器在函数后面添加nop
指令以启用增量重新链接。如果稍微更改一点函数,它就会增长,那么链接器就不必移动后面的所有函数。相反,增长覆盖了一些以前的nop。
如果你解出__Z41__static_initialization_and_destruction_0ii
,那么你得到__static_initialization_and_destruction_0(int, int)
。
看看这个答案,也许还有这个文件。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 调用专用模板时出错"no matching function for call to [...]"
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- Confusion: decltype vs std::function
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么 std::function 可以作为 std::not2 的参数?
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 传递给std::function template的template参数究竟代表什么
- 函数是否可以访问传递给main()的参数
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- 在第 16,54,55,56,57,58 行中,我收到错误"Statement missing ; in function main()"为什么?
- 使用 -g 选项编译,但"Single stepping until exit from function main, which has no line number information"
- 我收到错误:"in function main: undefined reference to Fraction::Fraction()"
- 即使我已经有分号"Statement missing ; in function main()" C++
- "Error: no matching function for call distance::distance()"......无法从 main 中的类声明对象?