内联汇编是C/C++的一个重要特性,内联汇编顾名思义是可以在C/C++ 语法内嵌套使用汇编指令,使用内联汇编的好处就是可以更灵活便捷,我觉得尤其是在做逆向这一块,简直不要太爽。
内联汇编Demo:
运行结果

以上是32 位C/C++ 使用内联汇编的小Demo,在x32 开发中,使用__asm 关键字就可以在其代码块内嵌入x32 汇编代码,好不方便。但是突然发现,x64 开发中,不支持这种内联汇编,尴尴尬尬,那我要是逆向一个x64 程序的时候怎么调用CALL(其实可以使用函数指针),而且也不灵活,不方便呀。好在有属于x64 的“内联汇编”
接下来,可以写入汇编指令
注:
汇编格式
```
.CODE ;这是开始
这里我说一下我的思路,之前x64 程序我调用call 都是使用函数指针来调用,这种方式虽然可以很方便的调用call,但是无奈不灵活(也可能是因为我太太太太太太太太太太菜)只能去使用已有的功能,所以这次使用汇编调用call,实现功能的修改,以下所有程序都是自写测试用:
项目大概:

运行效果:
运行前:

运行后:

3.1. ASM
3.2 CPP
github 地址:943K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6v1K9h3q4v1K9h3&6d9L8$3&6Y4x3e0t1I4x3K6S2Q4x3V1k6f1k6i4y4@1b7i4y4E0h3o6j5@1i4K6u0W2k6$3W2@1
[CSDN 地址]
(ea1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4q4I4i4K6g2X3y4o6l9#2x3K6f1H3z5e0N6Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0p5H3y4U0f1J5y4o6t1#2z5g2)9J5z5b7`.`.
#include <stdio.h>
#include <windows.h>
int asmFunc()
{
int a = 0;
__asm
{
// 变量a 地址复制给eax
mov eax, a
// eax 地址做加点运算
add eax, 0x1213
// 将计算后的值传递a
mov a, eax
}
// 返回eax
return a;
}
int main()
{
printf("0x%X\r\n", asmFunc());
system("pause");
}
[培训]科锐逆向工程师培训第53期2025年7月8日开班!