首页
社区
课程
招聘
[求助] x64内联汇编如何不call?
发表于: 2017-7-21 03:12 4149

[求助] x64内联汇编如何不call?

2017-7-21 03:12
4149

在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期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 782
活跃值: (3430)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
2
不知所云。如果是想代码里某个地方不出现call的话,可以考虑手动修改为push/ret
2017-7-21 10:44
0
雪    币: 705
活跃值: (503)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3


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:

main() {  

   __asm {  

      int 3  

   }  

}  

https://msdn.microsoft.com/en-us/library/f408b4et.aspx


搜一遍msdn再来提问

2017-7-21 13:46
0
雪    币: 515
活跃值: (3272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
4

补充一下.
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这种,怎么处理?

是不是还要添加关键字或编译选项之类的?

请各路神仙加持



2017-7-21 19:09
0
雪    币: 515
活跃值: (3272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
5
yeyeshun 不知所云。如果是想代码里某个地方不出现call的话,可以考虑手动修改为push/ret
不是32位程序 
2017-7-21 19:11
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
wem 不是32位程序
明显做不到__debugbreak();  就不是普通函数,这个是编译器预制的标记,看到这个就替换成Int3。
2017-7-21 19:54
0
雪    币: 782
活跃值: (3430)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
7
wem 不是32位程序
64位也有push/ret
2017-7-24 11:10
0
游客
登录 | 注册 方可回帖
返回
//