x@y是什么语法?
int main()
{
puts("Hello");
return 0;
}
The .s -fpic source:
... snipped ...
main:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $4, %esp
call __i686.get_pc_thunk.bx
addl $_GLOBAL_OFFSET_TABLE_, %ebx
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
leal .LC0@GOTOFF(%ebx), %eax
movl %eax, (%esp)
call puts@PLT
movl -4(%ebp), %ebx
leave
ret
... snipped ...
其中的
leal .LC0@GOTOFF(%ebx), %eax
call puts@PLT
.LC0@GOTOFF和puts@PLT是什么意思?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
.LC0@GOTOFF 就是变量在 GOT 中的偏移, ebx 是 GOT 的基地址。
puts@PLT 与上述类似。
最近在研究重定位,有点眉目了
.LC0@GOTOFF 指示as对.LC0生成R_386_GOTOFF重定位类型
puts@PLT 指示as对puts生成R_386_PLT32重定位了类型