在asm文件中定义了一个函数test,生成lib导入,代码中调用成功.
用ida查看,是call test这样的形式,
但是代码中插入 __debugbreak();这个,ida查看,就只有int 3;一句.
这样去掉call呢?是不是还要什么关键字?
.data .code testA PROC mov rax , rcx ret testA ENDP END ; end of assembly file
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
When compiling with /clr, a function containing __debugbreak will be compiled to MSIL. asm int 3 causes a function to be compiled to native. For more information, see __asm
For example:
main() {
__debugbreak();
}
is similar to:
__asm {
int 3
https://msdn.microsoft.com/en-us/library/f408b4et.aspx
搜一遍msdn再来提问
补充一下.64位程序+汇编的问题。同一个代码中,两个汇编调用形式不一样。源代码:
MyAsmFun PROC
mov rax , rcx
jmp rax
MyAsmFun ENDP
extern "C" void MyAsmFun(ULONG64 val);//asm编译成lib,导入工程。
void AA()
{__debugbreak();MyAsmFun(123);
IDA查看汇编结果:int 3
call MyAsmFun
自己那个汇编调用是call这种形式,__debugbreak直接是汇编码 int 3.
我不想要call这种,怎么处理?
是不是还要添加关键字或编译选项之类的?
请各路神仙加持
yeyeshun 不知所云。如果是想代码里某个地方不出现call的话,可以考虑手动修改为push/ret
wem 不是32位程序