下記のコードをコンパイルし、objdumpで実際に配置されるメモリのアドレスを確認することはできないでしょうか。
C
1//bof3.c 2#include <stdio.h> 3#include <string.h> 4#include <stdlib.h> 5int main(int argc, char **argv) { 6 char buffer[256]; 7 if(argc != 2) { 8 exit(0); 9 } 10 printf("%p\n", buffer); 11 strcpy(buffer, argv[1]); 12 printf("%s\n", buffer); 13 return 0; 14} 15
コマンド
gcc -m64 bof3.1.c -o bof3.1 -fno-stack-protector -z execstack objdump -d -M intel -j .plt --no bof3.1
objdump結果
bof3.1: file format elf64-x86-64 Disassembly of section .plt: 0000000000001020 <.plt>: 1020: push QWORD PTR [rip+0x2fe2] # 4008 <_GLOBAL_OFFSET_TABLE_+0x8> 1026: jmp QWORD PTR [rip+0x2fe4] # 4010 <_GLOBAL_OFFSET_TABLE_+0x10> 102c: nop DWORD PTR [rax+0x0] 0000000000001030 <strcpy@plt>: 1030: jmp QWORD PTR [rip+0x2fe2] # 4018 <strcpy@GLIBC_2.2.5> 1036: push 0x0 103b: jmp 1020 <.plt> 0000000000001040 <puts@plt>: 1040: jmp QWORD PTR [rip+0x2fda] # 4020 <puts@GLIBC_2.2.5> 1046: push 0x1 104b: jmp 1020 <.plt> 0000000000001050 <printf@plt>: 1050: jmp QWORD PTR [rip+0x2fd2] # 4028 <printf@GLIBC_2.2.5> 1056: push 0x2 105b: jmp 1020 <.plt> 0000000000001060 <exit@plt>: 1060: jmp QWORD PTR [rip+0x2fca] # 4030 <exit@GLIBC_2.2.5> 1066: push 0x3 106b: jmp 1020 <.plt>
---追記---
私が読んでいる本では以下のようにobjdumpのみで、実行後に配置されるようなメモリの値がでているようです。。これはelf32だからなのでしょうか。。。
メモリアドレスは、実際にロードされるまで分からないと思いますが?

回答2件
あなたの回答
tips
プレビュー