【发布时间】:2016-06-15 10:02:19
【问题描述】:
我想从 AT&T 汇编中的文件中读取数据,但我真的不知道从哪里开始。 我在互联网上没有找到有用的资源。
我的工作环境信息:
OS: Ubuntu 14 - 64 bit
CPU: Intel
GAS compiler
Assembly Sintax: AT&T
I'll assemble with: as -o hello.o hello.s
I'll link with: ld -o test hello.o
【问题讨论】:
-
如果你这样做纯粹是为了教育目的,你还不如作弊。 (嗯,这在我的脑海中听起来更合乎逻辑。哦,好吧!)我的意思是,您应该用 C 编写等效代码,然后请求编译器生成它编译到的汇编代码的转储。浏览该程序集输出并确保您理解它的含义。 手写组装的费力行为不是教育目的的重要部分。没有人在汇编中写这些东西了。重要的部分是理解它的含义以及如何完成。
-
你知道如何进行系统调用吗?您知道在 x86 上需要使用哪些系统调用来写入文件吗?
-
@CodyGray:进行系统调用的 C 代码实际上只是调用 glibc 的包装器。除非您自己编写或使用调试器进入 glibc 的包装器,否则您不会真正看到 arg-setup 和
syscall。 (或者在32位代码中,对于从内核导出的vdso页面中的int 0x80或sysenter相同,以实现32位sysenter/sysexit舞蹈的用户空间端。)但我同意整体观点:学习 Unix 系统调用 API 与学习 asm 和系统调用 ABI 是正交的。
标签: linux assembly x86 x86-64 att