游戏安全实验室 首页 技术入门 查看内容

 阅读目录

【技术入门】逆向基础之内联汇编注意的问题

发布于:2018-9-20 10:36   |    72672次阅读 作者: 外部投稿    |   原作者: 通化程序员

内联汇编写法很容易

__asm{},把自己想插入的汇编代码直接按照汇编的语法编写即可。

但是内联的代码,很多时候有运行错误,但是编译器是不会管我们的,所以我们就要额外小心的使用。

 

例如下面的例子

 

 

看上去没有什么错误

但是实际上这样运行  是百分百会崩溃的

原因很简单,汇编代码不合法!

有的同学会说哪里不合法啊?

我们看int a[3] = {7,键码,1}; 一个数组

在逆向的本质里,其实就是3个局部变量而已

[ebp-4],[ebp-8],[ebp-C]

a是这个数组的首地址  即ebp-C

 

那么我们看  下面的内联汇编中

push a 是否合法

也就是  push  ebp - C

那么当然是不合法的

 

 

所以我们要改成以下代码

 

想把   数组或则结构体的指针传递给 内联汇编

正确的方法一

 

我们 lea ebx,a[0]

相当于  lea ebx,[ebp-C]

然后再 push ebx

这样就合法了

如下图

 

 

 

或则 正确的方法二

把指针转换成  用局部变量存放 然后再PUSH

 

 

 

总之,使用内联汇编,一定要对其机制比较了解

否则稍不小心,会在上面浪费很多调试时间



来源:通化程序员—投稿

GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩2 赞0

收藏

上一篇:【技术入门】逆向技术入门之主线程调用防止软件崩溃

下一篇:【游戏安全】逆向中共享内存的应用

最新评论
B Color Image Link Quote Code Smilies

发表评论