|
|

楼主 |
发表于 2005-7-9 11:42:43
|
显示全部楼层
Post by kj501
这三句好理解。就是获取标号.L2,也就是popl %ecx这条指令的地址,然后保存在%ecx中。这种做法是一个常见的汇编技巧。
嗯,没错.
Post by kj501
至于最后这一句,我用as编译后再用objdump -d反汇编出来是这样:
- 16: e8 00 00 00 00 call 1b <_start+0x1b>
- 1b: 59 pop %ecx
- 1c: 81 c1 03 00 00 00 add $0x3,%ecx
复制代码
我想可以把 $_GLOBAL_OFFSET_TABLE_+[.-.L2]理解成符号_GLOBAL_OFFSET_TABLE_所在的地址减去标号.L2所在的地址之差。%ecx加上这个差之后,其值正好等于_GLOBAL_OFFSET_TABLE_所在的地址。
在汇编出来的程序中,标号.L2的地址为1b,符号_GLOBAL_OFFSET_TABLE_的地址我想应该是81 c1 03 00 00 00中03这个字节所在的位置,也就是1e,这样减下来,正好是3。
我也没有找到资料,纯属瞎猜。
我也做了这样的反汇编,我们先不管他的整体意思是什么,我想搞清楚这个 . 究竟表示什么,还有这个[]又表示什么咧? |
|