我寫了一個小的C程序:字符串數據存儲在哪裏?
#include <stdio.h>
int main()
{
char s[] = "Hello, world!";
printf("%s\n", s);
return 0;
}
其編譯爲(我的Linux機器上):
.file "hello.c"
.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 $32, %rsp
movq %fs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
movl $1819043144, -32(%rbp)
movl $1998597231, -28(%rbp)
movl $1684828783, -24(%rbp)
movw $33, -20(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call puts
movl $0, %eax
movq -8(%rbp), %rdx
xorq %fs:40, %rdx
je .L3
call __stack_chk_fail
.L3:
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2"
.section .note.GNU-stack,"",@progbits
我不明白的彙編代碼,但我看不到任何地方字符串消息。那麼可執行文件如何知道要打印什麼?
該字符串是內存中的常量,如果使用編輯器打開二進制文件,它甚至應該可見;然後通過在反彙編中可見的movl將數據複製到您的數組中。 – Dariusz 2013-03-05 12:17:44
在您的ELF可執行文件上使用'strings'命令。 – cdarke 2013-03-05 12:31:15