我有一个ELF 32位动态链接,剥离文件,我想调试.尝试在地址处设置断点时,会显示一条消息,指出未加载符号表.
我的问题是:
stripped正是发生了什么?我知道未初始化的全局变量在BSS段中被恢复,操作系统应该将其初始化为零.
但是,这应该不是必须的,我从来没有见过任何标准说,未初始化的全局,必须是默认为零,因此它是安全的,授予借此?
[root@ gwan]# file gwan
gwan: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
[root@ gwan]# ldd gwan
not a dynamic executable
[root@ gwan]# du -csh gwan
208K gwan
208K total
Run Code Online (Sandbox Code Playgroud)
gwan是如何做到的?
作为一个Web服务器,它需要执行套接字编程和许多其他繁重的工作,这些工作都需要与libc链接,但gwan似乎并非如此.怎么可能?
我有一个STM32,我在其中加载ELF文件(使用OpenOCD和JTAG).到目前为止,我还没有真正关注我加载的ELF文件的大小.
通常,当我编译一个对我的电路板来说太大的ELF文件时(我的电路板有128KB的RAM可以加载可执行文件),链接器会抱怨(在链接器脚本中我指定了RAM的大小).
现在我注意到输出的ELF文件的大小,我看到它是261KB,然而链接器没有抱怨!
为什么我的ELF文件如此之大,但我的链接器很好用吗?主机上的ELF文件是否完全加载到主板上?
问题很简单; 是否可以将bash脚本转换为可执行文件?如果是的话,怎么办呢?
为什么printf()执行sys_mmap()然后将块的内容(1024)复制到sys_write()的新地址空间?
简单静态"hello"程序的Strace如下所示.
> gcc -o hello -static hello.c
> strace ./hello
execve("./hello", ["./hello"], [/* 71 vars */]) = 0
uname({sys="Linux", node="Kumar", ...}) = 0
brk(0) = 0x1ce8000
brk(0x1ce91c0) = 0x1ce91c0
arch_prctl(ARCH_SET_FS, 0x1ce8880) = 0
readlink("/proc/self/exe", "/home/admin/hello", 4096) = 18
brk(0x1d0a1c0) = 0x1d0a1c0
brk(0x1d0b000) = 0x1d0b000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 28), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feda2130000
write(1, "Hello", 5Hello) = 5
exit_group(0) …Run Code Online (Sandbox Code Playgroud) 如何打开文件并将信息复制到另一个文件。我只需要复制幻数和版本。void read_header(FILE * file,File * file2);
当我反汇编ELF可执行文件时,我看到一个GNU_HASH似乎包含哈希的部分.我认为这是一个签名,以检查可执行文件是否被病毒修补或感染.
有没有办法检查这个签名?Linux在运行程序时是否会自动检查此签名?
我正在看我的ELF反汇编,有些线条是这样的:
.text:000105e0 00 b0 a0 e3 mov fp, #0
.text:000105e8 04 10 9d e4 pop {r1}; (ldr r1, [sp], #4)
Run Code Online (Sandbox Code Playgroud)
其他人喜欢这个:
.plt:00010568 00 c6 8f e2 add ip, pc, #0, 12
.plt:0001056c 10 ca 8c e2 add ip, ip, #16, 20 ; 0x10000
Run Code Online (Sandbox Code Playgroud)
和其他人喜欢:
.init:00010544 08 40 2d e9 push {r3, lr}
Run Code Online (Sandbox Code Playgroud)
反汇编行的.text,.plt和.init部分是什么意思?
假设我有一个ELF二进制文件prog并假设objdump -d prog沿着以下行生成输出[snippet]:
0000000000400601 <.cstart_c941>:
400601: eb 01 jmp 400604 <.end_c941>
0000000000400603 <.cslot_c941>:
400603: 84 .byte 0x84
0000000000400604 <.end_c941>:
400604: 48 81 ec 80 00 00 00 sub $0x80,%rsp
40060b: 50 push %rax
40060c: 53 push %rbx
40060d: 56 push %rsi
40060e: 48 31 c0 xor %rax,%rax
400611: 48 c7 c6 41 06 40 00 mov $0x400641,%rsi
Run Code Online (Sandbox Code Playgroud)
我需要的是文件偏移对应.cslot_c941,因为我需要在这个位置修改字节.
我该如何完成这项任务?