测试平台为Linux 32位。
我使用 IDA Pro 从由 gcc 4.6.3 编译的 coreutils 8.5 中反汇编 basename
这是 IDA Pro 生成的代码片段
call _i686_get_pc_thunk_bx
add ebx, 292Eh
sub esp, 18h
mov eax, ds:(__dso_handle_ptr - 804DFF4h[ebx]
test eax, eax
jz short loc_804B6F8
mov eax, [eax]
loc_804B6DB:
mov [esp+1Ch+var_14], eax
mov eax, [esp+1Ch+arg_0]
mov dword [esp+1Ch+var_18], 0
mov [esp+1Ch+var_1C], eax
call __cxa_atexit
add esp, 18h
pop ebx
retn
loc_804B6F8:
xor eax, eax
jmp short loc_804B6DB
我不明白这一行:
mov eax, ds:(__dso_handle_ptr - 804DFF4h[ebx]
搜索代码后,我只能找到这个:
__dso_handle dd 0
在 .data 部分。
所以我的问题是:
- 这行是什么意思..?它就像一个版本检查的东西..?
- 我可以在不影响代码功能的情况下安全地删除这一行吗?