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

2412d,d语言中写汇编

原文
嗨,我只是想共享该要点,它展示了如何在ASM中用D编写你好.
D中写汇编非常方便!这是我写的:

extern(C) int main()
{
  auto hip = "hello D\n".ptr;
  size_t len = 8;
    //`write(1,消息,长度)`
  asm {
    mov RDX, len;
    //缓冲长度
    mov RSI, hip;
    //消息缓冲
    mov EDI, 1;
    //`Stdout`文描符`(0x01)`
    mov RAX, 0x2000004;
    //写入系统调用编号(在`Linux`上为`0x01`)
    syscall;
    //`syscall`
  }
  return 0;
}

编译它:

dmd -betterC -ofhello hello.d

MacOS(Intel)上出现以下结果:

  objdump d M intel ./main
./main:|file format macho 64bit x86-64
 第`__TEXT`,`__text`节的反汇编:
0000000100000fcc <_main>:
100000fcc: 55                          |push|rbp
100000fcd: 48 8b ec                    |mov|rbp, rsp
100000fd0: 48 83 ec 10                 |sub|rsp, 0x10
100000fd4: 48 8d 05 25 00 00 00        |lea|rax, [rip + 0x25]       ## 0x100001000
100000fdb: 48 89 45 f0                 |mov|qword ptr [rbp - 0x10], rax
100000fdf: 48 c7 45 f8 08 00 00 00     |mov|qword ptr [rbp - 0x8], 0x8
100000fe7: 48 8b 55 f8                 |mov|rdx, qword ptr [rbp - 0x8]
100000feb: 48 8b 75 f0                 |mov|rsi, qword ptr [rbp - 0x10]
100000fef: bf 01 00 00 00              |mov|edi, 0x1
100000ff4: b8 04 00 00 02              |mov|eax, 0x2000004
100000ff9: 0f 05                       |syscall
100000ffb: 31 c0                       |xor|eax, eax
100000ffd: c9                          |leave
100000ffe: c3                          |ret

当我把syscall编号写入RAX时,objdumpeax显示它,不知道为什么!

顺便:MacOS上的syscall编号显然不稳定,通过C的stdlib调用内核,才是"正确"方式.

这很酷,因为我在D中找不到太多汇编的信息,这或许对别人有用.


http://www.kler.cn/a/463720.html

相关文章:

  • 把vue项目或者vue组件发布成npm包或者打包成lib库文件本地使用
  • PCA降维算法详细推导
  • 【保姆级】sql注入之堆叠注入
  • 深入浅出 Beam Search:自然语言处理中的高效搜索利器
  • [CTF/网络安全] 攻防世界 simple_php 解题详析
  • IDEA试用总结
  • 机器学习 LightGBM 算法原理解析
  • QT---------GUI程序设计基础
  • Linux下Shell编程之sed命令详解及示例
  • C#语言的字符串处理
  • 上位机开发 的算法与数据结构
  • ƒ () { [native code] } 的解释
  • Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02
  • c#枚举和结构体类型详解
  • 【2024年-6月-28日-开源社区openEuler实践记录】探索 easy - software:简化软件部署与管理的开源方案
  • Ubuntu如何安装jdk并切换到不同的jdk版本
  • 【gopher的java学习笔记】mybatis的mapper是什么
  • 【C++】模板使用总结
  • MyBatis执行一条sql语句的流程(源码解析)
  • 深度学习——损失函数汇总
  • 【第四期书生大模型实战营基础岛】L1G5000——XTuner 微调个人小助手认知任务
  • 工业相机基本参数
  • Redis——主从复制模式
  • 一道C++面试题关于nullptr的知识点
  • Echarts+vue电商平台数据可视化——webSocket改造项目
  • ES数据管理