【问题标题】:read data from file in assembly AT&T从 AT&T 汇编文件中读取数据
【发布时间】: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 0x80sysenter相同,以实现32位sysenter/sysexit舞蹈的用户空间端。)但我同意整体观点:学习 Unix 系统调用 API 与学习 asm 和系统调用 ABI 是正交的。

标签: linux assembly x86 x86-64 att


【解决方案1】:

查看如何在 C 中在 POSIX 上进行系统编程 (open/read/write/etc.),然后在您的 asm.xml 中使用相同的系统调用。与仅在 C 中执行相比,asm 没有什么特别之处。(除了在 C 中您将使用 glibc 包装器而不是直接使用 syscall 指令。)

请参阅 tag wiki 以获取记录如何从 asm 进行系统调用的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多