linux汇编:如何调用系统调用?

2023-11-25

我想在汇编中调用系统调用。问题是我不能mov ecx,rsp. rsp是64位寄存器,ecx是一个32位寄存器。我想将缓冲区地址作为此系统调用的参数传递。我能做些什么?谢谢。

section .data 
s0: db "Largest basic function number supported:%s\n",0
s0len: equ $-s0

section .text 
global main
extern write
main: 
sub rsp, 16
xor eax, eax
cpuid

mov [rsp], ebx
mov [rsp+4], edx
mov [rsp+8], ecx 
mov [rsp+12], word 0x0

mov eax, 4
mov ebx, 1
mov ecx, rsp
mov edx, 4 
int 80h

mov eax, 4
mov ebx, 1
mov ecx, s0
mov edx, s0len 
int 80h

mov eax, 1
int 80h

要在 64 位 Linux 中进行系统调用,请将系统调用号放入 rax,并将其参数按顺序放在 rdi、rsi、rdx、r10、r8 和 r9 中,然后调用 syscall。

请注意,64 位索书号与 32 位索书号不同。

这是 GAS 语法的示例。将地址放入寄存器的 NASM 语法是lea rsi, [rel message]使用 RIP 相关的 LEA。

        .global _start

        .text
_start:
        # write(1, message, 13)
        mov     $1, %rax                # system call 1 is write
        mov     $1, %rdi                # file handle 1 is stdout
        lea     message(%rip), %rsi     # address of string to output
        mov     $13, %rdx               # number of bytes
        syscall

        # exit(0)
        mov     $60, %rax               # system call 60 is exit
        xor     %rdi, %rdi              # return code 0
        syscall

.section .rodata           # read-only data section
message:
        .ascii  "Hello, World\n"

也可以看看如果在 64 位代码中使用 32 位 int 0x80 Linux ABI 会发生什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux汇编:如何调用系统调用? 的相关文章

  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • NPTL 和 POSIX 线程有什么区别?

    NPTL 和 POSIX 线程之间的基本区别是什么 这两者是如何演变的 POSIX 线程 pthread 不是一个实现 它是几个函数的 API 规范 纸上的标准 英文 其名称以pthread 以及定义在
  • 何时可以重用avx指令中的源寄存器

    在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用 例如 我想使用vgatherdps该指令消耗两个 ymm 寄存器 其中之一是位移索引 我意识到vgatherdps由于数据的局部性较差 因此需要花费大量时间来收集 位移索引寄存器
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • Grub 和进入实模式(低级汇编语言编程)

    我一直在开发一个玩具操作系统 并一直使用 grub 作为我的引导加载程序 最近尝试使用 VGA 时 我发现无法使用硬件中断 我发现这是因为我被 grub 置于保护模式 有人知道如何在不删除 grub 的情况下回到实模式吗 如果您使用 GRU
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • Intel:序列化指令和分支预测

    英特尔架构开发人员手册 http www intel com content www us en architecture and technology 64 ia 32 architectures software developer v
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do

随机推荐

  • 为什么菱形运算符在 Java 7 中的 addAll() 调用中不起作用?

    鉴于这个例子泛型教程 List
  • 使用 JUnrar 提取文件

    我之前问过一个关于用 Java 提取 RAR 存档的问题 有人向我推荐了 JUnrar 官方网站已经关闭 但它似乎被广泛使用 因为我在网上发现了很多关于它的讨论 有人可以告诉我如何使用 JUnrar 提取存档中的所有文件吗 我在网上找到了一
  • 在 PyInstaller 中打包多个脚本

    我正在使用 PyInstaller 将两个脚本转换为一个可执行文件 其中一个脚本调用另一个脚本 我遇到的问题是我无法弄清楚如何捆绑两个脚本并仍然让它们相互引用 导致问题的代码是一个脚本 script1 py包含 subprocess cal
  • 数据库清理器无法在 minitest 轨道中工作

    如果我单独运行 我的 Minitest 控制器测试工作正常rake minitest controllers但当我跑步时rake minitest all然后我收到验证失败错误 这是因为模型测试中已经使用了电子邮件 我使用DatabaseC
  • 使用 SF 符号时调整图像大小 - UIImage(systemName:)

    我有以下预打包的系统 SF 映像 UIImage systemName location fill 它可能看起来微不足道 但我如何调整它的大小以使其更大 谢谢 你可以实例化一个UIImage SymbolConfiguration 例如 您
  • webpack + babel loader 源映射引用空文件

    我有一个 es6 项目 我使用 webpack babel loader 捆绑它 当我打开开发工具时 我可以在下面看到 webpack 和我的所有源代码 es6 问题是 断点没有命中 函数引用将我定向到文件名 d41d 其中有以下内容 un
  • Thor 和 YAML 以二进制输出?

    我正在使用 Thor 并尝试将 YAML 输出到文件中 在 irb 中我得到了我所期望的 YAML 格式的纯文本 但是当作为雷神方法的一部分时 它的输出是不同的 class Foo lt Thor include Thor Actions
  • Crosswalk 无法解析配置“:_armv7DebugCompile”的所有依赖项

    直到几天前我使用Crosswalk 18 成功构建了我的应用程序 今天我遇到了这个错误 What went wrong A problem occurred configuring root project android gt Could
  • DateUtils.getRelativeTimeSpanString 用于未来日期

    因此 Android SDK 中的 DateUtils getRelativeTimeSpanString 1 非常适合显示过去的相对时间 即 5 天前或 5 分钟前 但对于未来的日期似乎不太适用 好像只是打印日期 是否有任何简单的替代方法
  • 如何初始化var?

    我可以用 null 或一些空值初始化 var 吗 C is a 严格 强类型语言 引入 var 是为了编译时类型绑定匿名类型然而 您可以将 var 用于设计时已知的原始类型和自定义类型 在运行时 没有像 var 这样的东西 它被替换为实际类
  • 无法确定名为 的参数的 GraphQL 输入类型

    我有两个相关模型 1 角色实体 import Column Entity BaseEntity OneToMany PrimaryColumn from typeorm import Field ObjectType from type g
  • 在c#中捕获游戏屏幕截图最快的方法?(每秒超过20张图像)

    如何快速截取整个游戏屏幕 大约每秒 20 30 次 我想将它们转换为视频 1 我尝试过 WMEncoder 结果是 WMEncoder 只能使用一组预配置的编解码器以视频格式 wma 捕获屏幕和屏幕区域 29 fps 最佳编码结果 WMEn
  • itertools.groupby 的意外行为

    这是观察到的行为 In 4 x itertools groupby range 10 lambda x True In 5 y next x In 6 next x StopIteration Traceback most recent c
  • 访问 .Net 中的自定义配置部分

    我正在尝试访问配置文件中的设置 该文件是一系列列出的 xml 元素 如下所示
  • 在 AS3 中查找(加载)图像大小(动作脚本 3.0)

    我目前使用以下函数来加载图像 但是我无法找到找到加载图像宽度的方法 我打算在使用相同函数放置下一个图像之前使用它 请注意 q 是一个变量 数字 用于加载不同的图像 X 我需要帮助获取加载的图像宽度 function LoadImage q
  • 获取图像中每种颜色的使用百分比

    我有这个工作 但它在 jpeg 图像上太慢了 还需要一些改变 我需要知道图像中的各个颜色 RGB 的容差为 1 以及该颜色占图像的百分比 所以如果图像是黑白的 它会说类似 白色 74 黑色 26 下面的代码就像我说的那样工作 但我还需要添加
  • 使用 .htaccess 从 URL 中删除“index.php”

    我一直在尝试该网站上的各种解决方案 但似乎都不起作用 我目前正在使用 Hostgator 进行托管 这是我当前的 htaccess 文件
  • Android:DatePicker 和 DatePicker 对话框

    我在选项菜单上有这个代码 Dialog dialog new Dialog ScheduleActivity this dialog setTitle Add Event dialog setContentView R layout add
  • 是否可以在 MongoDB 之上实现多版本并发控制 (MVCC)?

    MongoDB 对我来说是一个很棒的数据库 然而 在某些情况下 我确实需要原子多文档事务 例如 在帐户之间转移事物 例如金钱或声誉 这需要完全成功或完全失败 我想知道是否可以通过实现多版本并发控制模式的库与 MongoDB 进行交互 表演会
  • linux汇编:如何调用系统调用?

    我想在汇编中调用系统调用 问题是我不能mov ecx rsp rsp是64位寄存器 ecx是一个32位寄存器 我想将缓冲区地址作为此系统调用的参数传递 我能做些什么 谢谢 section data s0 db Largest basic f