当前位置: 首页 > news >正文

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

目录

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

底层原理:

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

http://www.cnnetsun.cn/news/2512850.html

相关文章:

  • 6.1 网络故障排查基础:连通性测试与抓包分析
  • 4.8.3 利用SparkSQL统计每日新增用户
  • 如何用3步将B站缓存视频变回可播放的MP4文件?
  • 短视频文案为什么总能让你心甘情愿停下来?
  • 抖音内容批量下载解决方案:告别手动保存的智能工具指南
  • 小白入门AI|跟着吴恩达学AI for Everyone,用Prompt轻松撸出一个生日贺卡应用✨
  • 博德之门3模组管理器终极指南:5分钟快速上手解决模组冲突
  • 在taotoken模型广场中根据任务与预算选择合适模型的实践
  • 彻底搞懂ARP协议:从底层原理到安全攻防,万字长文带你吃透局域网通信的“隐形桥梁”
  • 3步快速搞定抖音资源批量下载:免费高效的开源工具完整指南
  • Cursor Free VIP深度解析:如何永久突破AI编程助手试用限制的完整指南
  • SMAPI模组加载器:终极星露谷物语模组管理完全指南
  • 当 AI 开始互相分工:真正的问题才刚刚开始
  • RK3588开发板Ubuntu系统实战攻略:从零构建高性能嵌入式平台
  • 如何通过 curl 命令直接测试 Taotoken 的聊天补全接口与模型响应
  • 3个步骤解锁NVIDIA显卡隐藏性能:免费工具终极指南
  • 专业级开源字体解决方案:Adobe Source Sans 3技术深度解析
  • 网盘直链解析工具完整指南:如何实现九大平台免登录高速下载
  • 54种字体样式革新设计:Barlow如何成为现代排版的瑞士军刀
  • 原来选床垫也有这么多讲究?
  • ARMv8-A架构TCR2_EL2寄存器详解与应用
  • Chrome for Testing架构深度解析:构建企业级浏览器自动化测试的5大技术优势
  • 如何在Linux上安装SOLIDWORKS:完整中文指南与实战教程
  • 3分钟快速上手:免费解锁加密音乐的终极浏览器解决方案
  • FastbootEnhance:告别命令行,Windows上最直观的Fastboot工具箱
  • Keil MDK许可证错误解析与中间件组件匹配方案
  • 5分钟掌握抖音资源批量下载:开源douyin-downloader终极指南
  • 顺丰邮政仓库干活的机器人,顺手拿了个具身高考第一
  • Sunshine游戏串流完全指南:打造你的专属云游戏平台
  • C++重载、重写、重定义