汇编 内联汇编与混合编程 (逆向分析)

目录

内联汇编与混合汇编的原理

底层原理:

x86与x64架构差异

X86内联汇编

X64混合编程


内联汇编与混合汇编的原理

  • 内联汇编:在C++中嵌入汇编代码,直接操作硬件资源,如寄存器和内存。

    • 示例:x86内联汇编.cpp中使用_asm块插入x86指令。
  • 混合汇编:C++与独立.asm文件结合,通过extern "C"调用汇编函数。

    • 示例:x64.cpp调用myasm.asm中的myadd函数,实现64位加法。

底层原理:

  1. 内联汇编:编译器(如Visual Studio)解析_asm块,将汇编指令直接转换为机器码,与C++代码整合。开发者手动管理寄存器和堆栈。

  2. 混合汇编:汇编代码编译为.obj文件,链接器合并C++和汇编符号。调用约定定义参数传递规则。

  3. 底层交互:通过寄存器(eax/rax)和堆栈传递数据。x86使用32位寄存器,x64使用64位并遵循Microsoft x64约定。

  4. 编译流程:预处理头文件,编译生成.obj,链接整合符号,生成可执行文件。

  5. 执行步骤:CPU取指、解码、执行、写回结果,推进程序计数器。

x86与x64架构差异

x86:32位寄存器(如eax、ebx),栈帧由esp和ebp管理,调用约定如__stdcall或__cdecl(参数压栈)。

x64:64位寄存器(如rax、rcx),新增r8/r9,栈帧依赖rsp;Microsoft x64约定前4参数通过rcx/rdx/r8/r9,其余压栈,调用者清理;栈16字节对齐(x86为4字节)。

底层原理:

  1. 寄存器扩展:x64将x86寄存器扩展为64位,提高数据处理效率。

  2. 调用约定优化:x64优先寄存器传参,减少内存访问,提升性能。

  3. 内存对齐:确保数据访问效率,避免对齐惩罚。

  4. 架构演进:x64兼容x86,但引入新指令集和ABI(应用二进制接口)。

  5. 兼容步骤:编译器根据目标架构生成代码,链接时检查约定一致性。

X86内联汇编

复制代码
#include <iostream>
#include<windows.h>

// 实现两个整数加法 
int myadd(int a, int b) {
	return a + b;
}

int main() {
	int nNum = 0;
	_asm {
		xor eax,eax
		mov eax,10
		add eax,nNum
		mov nNum,eax
		push 1
		push 2
		call myadd
		add esp,8


	}
	system("pause");
	return 0;
}

X64混合编程

  • 直接调用这个asm文件就可以了链接器会带我们找到的

    /*
    1 函数声明 myadd
    2 声明外部汇编函数 计算两个64位整数和
    3 通过extren c链接汇编实现myadd
    4 C++ 与汇编通过链接器整合,遵循 Microsoft x64 调用约定
    5
    */
    extern "C" long long myadd(long long llNumberA, long long llNumberB);

    int main()
    {
    long long llRes = myadd(1, 2);
    std::cout << llRes << std::endl;

    复制代码
      system("pause");
      return 0;

    }

asm文件

复制代码
.code
myadd proc
	sub rsp,28h
	xor rax,rax
	add rax,rcx
	add rax,rdx
	add rsp,28h
	ret
myadd endp
end

相关推荐
斑马1397 天前
ARM学习笔记(二)——ARM汇编基础
汇编·arm开发·arm
wechatbot8887 天前
【极客互动】企业微信Spring Boot 调度 SearchContact开发自动添加外部联系人网关
汇编·微信·自动化·企业微信·rpa
星栖与芯8 天前
LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
汇编·stm32·嵌入式硬件·harmonyos
星栖与芯8 天前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t9 天前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力559 天前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳10 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t10 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳10 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor11 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机