【问题标题】:GNU Assembler sys_write is not workingGNU 汇编器 sys_write 不工作
【发布时间】:2017-01-07 22:37:06
【问题描述】:
我写了一个简单的 ASM 程序,但是 sys_write 没有给出任何输出。我想我在指向 %ecx 的指针上犯了一个错误,而 sys_write 无法访问该字符串 - 但到目前为止我还没有发现我的错误。 sys_write 后的返回码存储在 %eax 中且小于 0。
有很多“Hello World”示例,但我想了解我做错了什么,而不是有其他工作代码的事实 :-)
我使用带前缀的 Intel 语法。
gdb 输出如下所示:
gdb ./testsasm
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
...
从 ./testsasm...读取符号完成。
(gdb) 中断主要
0x4004d6 处的断点 1:文件 t.asm,第 13 行。
(gdb) n
程序没有运行。
(gdb) 运行
启动程序:...src/gnu_asm/testsasm
t.asm:13 处的断点 1,main ()
13 mov %ebx,0x1 # 文件句柄标准输出
(gdb) n
14 mov %eax,0x4 # 系统调用 sys_write
(gdb) n
15 mov %ecx,string # 字符串指针 const
(gdb) n
16 mov %edx,slen # 字符串长度
(gdb) n
17 int 0x80 # 调用写入
(gdb) 打印 $ecx
$1 = 1819043144
(gdb) 打印 $edx
$2 = 7
(gdb) 打印 *$ecx
无法访问地址 0x6c6c6548 处的内存
(gdb)
Makefile 和源代码可以在这里找到:http://paste.ubuntu.com/23115239
【问题讨论】:
标签:
linux
assembly
x86
gnu-assembler