我如何开始学习装配

Ric*_*haw 18 assembly

我想在我的Mac上编写一些程序集,理想的是原生的,但是我知道在QEMU中学习它是否更容易.

我看到根据处理器有不同的装配方言 - 什么方言是"最好的"学习?

我真的不知道从哪里开始,有关如何在程序集中运行程序的任何指示?

Ste*_*ini 17

我的建议是与那里最好的汇编制作人合作:gcc.

用C编写简单的程序,然后用-S开关编译它们.你将得到一个包含汇编代码的file.s.修补它,你会学到它.最好的部分是,如果你想学习不同的汇编程序,你可以将gcc编译为交叉编译器,并为任何支持的平台生成汇编程序.

记得用-O0禁用优化,否则你会发现奇怪的技巧.

这是汇编程序中的hello world

    .cstring
LC0:
    .ascii "hello world!\0"
    .text
.globl _main
_main:
    pushl   %ebp
    movl    %esp, %ebp
    pushl   %ebx
    subl    $20, %esp
    call    L3
"L00000000001$pb":
L3:
    popl    %ebx
    leal    LC0-"L00000000001$pb"(%ebx), %eax
    movl    %eax, (%esp)
    call    L_puts$stub
    movl    $0, %eax
    addl    $20, %esp
    popl    %ebx
    leave
    ret
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_puts$stub:
    .indirect_symbol _puts
    hlt ; hlt ; hlt ; hlt ; hlt
    .subsections_via_symbols
Run Code Online (Sandbox Code Playgroud)

  • 好的,你需要-S not -s. (2认同)

Gab*_*yer 1

好吧,尽管它不是一些人所说的“最好”的组件,但我还是建议学习 X86 / X86-64,因为它是使用最广泛的。要运行该程序,您只需使用 GCC 将其转换为二进制文件,然后通过控制台运行即可。