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二进制文件。这个谜题可能是想让你了解其中的大部分含义。