标签: elf

在剥离的ELF可执行文件中设置断点

我有一个ELF 32位动态链接,剥离文件,我想调试.尝试在地址处设置断点时,会显示一条消息,指出未加载符号表.

我的问题是:

  1. 当你说一个ELF文件stripped正是发生了什么?
  2. 你如何剥离ELF文件?
  3. 有可能以某种方式重建符号表吗?
  4. 是否无法在剥离的可执行文件中在gdb中设置断点?

gdb reverse-engineering elf disassembly

2
推荐指数
1
解决办法
4072
查看次数

未初始化的全局变量在c中是否始终默认为0?

我知道未初始化的全局变量在BSS段中被恢复,操作系统应该将其初始化为零.

但是,这应该不是必须的,我从来没有见过任何标准说,未初始化的全局,必须是默认为零,因此它是安全的,授予借此?

c elf

2
推荐指数
1
解决办法
162
查看次数

一个不需要任何库的可执行文件,甚至是libc?

[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似乎并非如此.怎么可能?

elf g-wan

2
推荐指数
1
解决办法
511
查看次数

ELF文件的大小与RAM中的大小

我有一个STM32,我在其中加载ELF文件(使用OpenOCD和JTAG).到目前为止,我还没有真正关注我加载的ELF文件的大小.

通常,当我编译一个对我的电路板来说太大的ELF文件时(我的电路板有128KB的RAM可以加载可执行文件),链接器会抱怨(在链接器脚本中我指定了RAM的大小).

现在我注意到输出的ELF文件的大小,我看到它是261KB,然而链接器没有抱怨!

为什么我的ELF文件如此之大,但我的链接器很好用吗?主机上的ELF文件是否完全加载到主板上?

elf stm32

2
推荐指数
1
解决办法
1167
查看次数

是否可以将bash脚本转换为可执行文件?

问题很简单; 是否可以将bash脚本转换为可执行文件?如果是的话,怎么办呢?

bash exe converter elf

2
推荐指数
2
解决办法
7960
查看次数

为什么在printfs调用期间完成了mmap?

为什么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)

linux system libc elf linux-kernel

2
推荐指数
1
解决办法
210
查看次数

如何在C中读取ELF标头?

如何打开文件并将信息复制到另一个文件。我只需要复制幻数和版本。void read_header(FILE * file,File * file2);

c elf

2
推荐指数
2
解决办法
8451
查看次数

是否可以检查ELF可执行文件的"GNU_HASH"部分中的哈希值?

当我反汇编ELF可执行文件时,我看到一个GNU_HASH似乎包含哈希的部分.我认为这是一个签名,以检查可执行文件是否被病毒修补或感染.

有没有办法检查这个签名?Linux在运行程序时是否会自动检查此签名?

linux hash elf digital-signature

2
推荐指数
1
解决办法
1882
查看次数

ELF Dissasembly - ".init .text .plt"是什么意思?

我正在看我的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部分是什么意思?

assembly elf

2
推荐指数
1
解决办法
412
查看次数

如何在与objdump输出的标签对应的ELF二进制文件中获取文件偏移量?

假设我有一个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,因为我需要在这个位置修改字节.

我该如何完成这项任务?

c++ linux x86 assembly elf

2
推荐指数
1
解决办法
477
查看次数