Assembly 联机编译器中不可编译的汇编程序代码

Assembly 联机编译器中不可编译的汇编程序代码,assembly,Assembly,我试图解决一个“数字难题”,并得到了一些汇编代码。遗憾的是,我对它一无所知,所以我试图将它放到一个在线编译器中,但它在每一行都会抛出错误: .file "0x0c.c" .text .section .rodata .LC0: .string "Pa" .LC1: .string "h15" .LC2: .string "wb0" .LC3: .string "u77" .LC4: .string "rd: " .LC5:

我试图解决一个“数字难题”,并得到了一些汇编代码。遗憾的是,我对它一无所知,所以我试图将它放到一个在线编译器中,但它在每一行都会抛出错误:

.file   "0x0c.c"
    .text
    .section    .rodata
.LC0:
    .string "Pa"
.LC1:
    .string "h15"
.LC2:
    .string "wb0"
.LC3:
    .string "u77"
.LC4:
    .string "rd: "
.LC5:
    .string "wo"
.LC6:
    .string "ss"
.LC7:
    .string "h0"
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $1104, %rsp
    movq    %fs:40, %rax
    movq    %rax, -8(%rbp)
    xorl    %eax, %eax
    leaq    .LC0(%rip), %rax
    movq    %rax, -1104(%rbp)
    leaq    .LC1(%rip), %rax
    movq    %rax, -1096(%rbp)
    leaq    .LC2(%rip), %rax
    movq    %rax, -1088(%rbp)
    leaq    .LC3(%rip), %rax
    movq    %rax, -1080(%rbp)
    leaq    .LC4(%rip), %rax
    movq    %rax, -1072(%rbp)
    leaq    .LC5(%rip), %rax
    movq    %rax, -1064(%rbp)
    movq    -1104(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    leaq    .LC6(%rip), %rax
    movq    %rax, -1056(%rbp)
    movq    -1056(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    movq    -1064(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    movq    -1072(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    leaq    .LC7(%rip), %rax
    movq    %rax, -1048(%rbp)
    movq    -1048(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcpy@PLT
    movq    -1088(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    movq    -1080(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    movq    -1096(%rbp), %rdx
    leaq    -1040(%rbp), %rax
    movq    %rdx, %rsi
    movq    %rax, %rdi
    call    strcat@PLT
    movl    $0, %eax
    movq    -8(%rbp), %rcx
    xorq    %fs:40, %rcx
    je  .L3
    call    __stack_chk_fail@PLT
.L3:
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (GNU) 7.3.1 20180312"
    .section    .note.GNU-stack,"",@progbits

正如我所说,我对此一无所知,只是想知道为什么编译器无法读取此信息。

编译器只适用于C这样的高级语言。您需要一个汇编程序。这看起来像是针对C文件运行gcc的汇编输出。您使用了什么命令生成这个?编译包括许多步骤。C源代码被编译成对象文件,在Linux上这些文件通常是可重新定位的ELF文件。类似地,使用诸如
as
之类的汇编程序将汇编源代码组装到目标文件中。然后使用链接器(如
ld
)将它们链接到可执行二进制文件。像
gcc
这样的编译器通常结合所有这些步骤。因此,您实际上可以调用
gcc-o0x0c0x0c.s
,并从该代码中获取一个可执行的64位ELF二进制文件。这个谜题可能是想让你了解其中的大部分含义。