所以基本上我是我的 nasm 语法 asm 代码,我使用了一些像这样的外部函数:
extern _printf
extern __imp__Sleep@4
....
call _printf
call [__imp__Sleep@4]
然后我用nasm把它组装成obj:
nasm -f win32 test.asm
然后我用IDA Pro反汇编test.obj,可以看到这样的代码:
看,像_printf这样的外部函数名被保留了下来。
但是当我链接这个 obj 文件时:
cl /MT z:\\windows\\test.obj /link kernel32.lib libcmt.lib /SUBSYSTEM:CONSOLE
然后我用IDA Pro反汇编test.exe,可以看到这样的代码:

看,_printf的函数名已经改了。
静态链接后基本知道_printf的代码已经放到test.exe中,在sub_409C9B的子程序中
但基本上我必须使 extern 声明函数的名称不可更改,因为我需要对 test.exe 进行逆向工程并对这些函数进行一些修改/删除,一旦 PE exe 丢失了名称信息,我就无法找到那些目标函数.
所以我的问题是:
为什么 cl.exe 会更改这些函数的名称,有什么办法可以阻止更改(我的意思是在链接期间保持函数名称不可更改)?