阅读目录
【技术入门】逆向基础之内联汇编注意的问题
发布于: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
总之,使用内联汇编,一定要对其机制比较了解 否则稍不小心,会在上面浪费很多调试时间
|

最新评论
发表评论