标签: elf

BASH:一次设置多个变量/ performance

我正在使用msys和mingw环境在Windows上运行bash脚本.我似乎有一个问题,使用像'cut'或sed'这样的命令会导致每次调用的开销.我不确定这是否是Windows运行.exe的影响或者是什么.反正这里是我的代码:

SOMETHING=`m6811-elf-readelf.exe -l "${TARGET_BASENAME}.elf" | sed '1,/Type / d' | sed '1,/^$/!d'`

echo "$SOMETHING" | while read -r line; do 
    # MEMORY_ADDRESSES=`echo $line | sed -ne 's/LOAD[^0-9a-z]*0x\([^ ]*\) 0x\([^ ]*\) 0x\([^ ]*\) 0x\([^ ]*\) 0x\([^ ]*\) .*/\1 \2 \3 \4 \5/p;'`
     OFFSET=`echo "$line" | cut -f12 -d\ `
     VIRTADDR=`echo "$line" | cut -f13 -d\ `
     PHYSADDR=`echo "$line" | cut -f14 -d\ `
     FILESIZE=`echo "$line" | cut -f15 -d\ `
     MEMSIZE=`echo "$line" | cut -f16 -d\ `
     echo $OFFSET $VIRTADDR $PHYSADDR …
Run Code Online (Sandbox Code Playgroud)

variables bash performance gcc elf

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

从C上读取Linux上的ELF字符串表

我想编写一个读取二进制字符串表的程序.二进制在ELF上运行在REDHAT linux 32上.我做了以下 -

  1. 阅读精灵标题
  2. 阅读所有部分

以下是我的程序的输出.

Entry Address of Binary - 0x8048340
Start of Program Header - 52
Start of section header - 3272
Size of header - 52
Number of section headers - 36
Size of each section headers - 40
Number of section headers - 36
Section header Offset - 3272
string tbl index for section[0] is 0
string tbl index for section[1] is 27
string tbl index for section[7] is 35
string tbl index for section[1879048182] …
Run Code Online (Sandbox Code Playgroud)

ptrace elf

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

在cygwin上找不到objdump

我想在cygwin上使用objdump命令.我得到了例外:

-bash:objdump:找不到命令

为什么cygwin无法找到objdump?

编辑----我可以在http://cygwin.com/packages/上看到binutils .一旦我找到binutils包,我点击它就会把我带到这里.我该如何安装?我到那儿后该怎么办?

cygwin elf objdump dwarf

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

Linux ELF 32位加载

我正在写一个x86二进制解释器.

目前我正在处理加载可执行文件和共享对象.但是我有些疑惑:

1)动态链接器/加载器是否连接主可执行文件和共享库的.ini部分,以便为进程映像生成一个.ini部分?对于.fini部分?

2)它是否连接了许多符号和字符串表?

3)我对重新安置感到失望.它们应该在二进制加载时或者在调用过程时发生?我想我不明白动态链接器/加载器如何管理重定位.

4)为什么存在.hash和.gnu.hash部分?为什么我需要'哈希'一个符号?

欢迎链接,评论和明显的答案.

c++ linux compiler-construction interpreter elf

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

如何在elf文件中获取用户定义的函数范围(开始和结束地址)?

我知道我们可以通过读取符号表来获取elf中用户定义函数的开始地址,如下所示,函数main和foo:

08048330 T _start
0804a014 b completed.6159
0804a00c W data_start
0804a018 b dtor_idx.6161
080483e4 T foo
080483c0 t frame_dummy
080483ee T main
Run Code Online (Sandbox Code Playgroud)

但如何获得某些功能的结束地址?

谁能给我一些帮助?谢谢!

linux elf disassembly symbol-table

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

编译器C的全局变量,静态和字符串文字的地址在哪里?

首先我读了地址是.data和.text持有字符串文字(加上我想的机器代码)之后在其他文章中有人说它已经改变了,而更长的字符串文字存在于.text但是.rodata而不是(这是真的我的铿锵声)编译器输出).但.data内容与我在C程序中的printf地址不匹配.

假设这个C程序:

static int a;
int main()
{
    printf("my address = %p\n", &a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个C程序的输出:

 $ ./a.out
my address = 0x804a01c
Run Code Online (Sandbox Code Playgroud)

然后是.data部分的内容:

$ objdump -s -j .data a.out

a.out:     file format elf32-i386

Contents of section .data:
 804a00c 00000000 00000000 
Run Code Online (Sandbox Code Playgroud)

0x804a01c这个内容没有.地址在哪里?

c linux 32-bit elf

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

ELF在.bss中的重新定位是什么,但相对于.bss,是什么意思?

我正在编写一些自定义的ELF二进制后处理代码,它可以处理.o文件.部分处理包括对二进制数据执行重定位.输入文件由GNU汇编器根据我自己的汇编代码生成.

看看GNU汇编器生成的这些疯狂的重定位:

Relocation section '.rel.bss' at offset 0x3b8 contains 2 entries: Offset Info Type Sym.Value Sym. Name 0000010b 00000301 R_386_32 00000000 .bss 00000110 00000301 R_386_32 00000000 .bss

首先,重新定位数据没有任何意义.bss.根据定义,数据.bss全部为零,无法调整为其他内容.

其次,相对于自己节的基地址重新定位值没有任何意义.这将是一个无操作.

那是什么给了?? 这些重新安置应该是什么意思?

(进入此二进制文件的asm代码包含以下内容:

.bss
keybuffer:
.space 256
Run Code Online (Sandbox Code Playgroud)

...然后:

.bss
anotherbuffer:
.space 4
Run Code Online (Sandbox Code Playgroud)

这就是上面你可以看到的补偿来自.)

assembly linker elf

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

在Heroku上使用python运行tensorflow的ImportError?

我试图在我的Heroku实例中导入tensorflow,并且我不断收到以下错误:

File "/app/tools/inception/classify_image.py", line 45, in <module>
2016-06-23T19:08:18.090957+00:00 app[clock.1]:     import tensorflow as tf
2016-06-23T19:08:18.090979+00:00 app[clock.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/tensorflow/__init__.py", line 23, in <module>
2016-06-23T19:08:18.091005+00:00 app[clock.1]:     from tensorflow.python import *
2016-06-23T19:08:18.091011+00:00 app[clock.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 45, in <module>
2016-06-23T19:08:18.091050+00:00 app[clock.1]:     from tensorflow.python import pywrap_tensorflow
2016-06-23T19:08:18.091068+00:00 app[clock.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
2016-06-23T19:08:18.091112+00:00 app[clock.1]:     _pywrap_tensorflow = swig_import_helper()
2016-06-23T19:08:18.091116+00:00 app[clock.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
2016-06-23T19:08:18.091136+00:00 app[clock.1]:     _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
2016-06-23T19:08:18.091166+00:00 app[clock.1]: ImportError: /app/.heroku/python/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so: invalid ELF header
Run Code Online (Sandbox Code Playgroud)

有人会知道为什么吗?我的requirements.txt中有以下行:

https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl
Run Code Online (Sandbox Code Playgroud)

我不确定无效的ELF标头是什么意思.我错过了依赖还是什么?

pip heroku elf python-2.7 tensorflow

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

从ELF中删除装配说明

我正在研究一个混淆的二进制文件作为crackme挑战的一部分.它得到的序列push,popnop指令(该指令将重复数千次).从功能上讲,这些块对程序没有任何影响.但是,他们非常努力地生成CFG和逆转过程.

有关于如何将指令更改为nop的解决方案,以便我可以删除它们.但在我的情况下,我想完全剥离这些指令,以便我可以更好地了解CFG.如果指令被剥离,我理解必须修改内存偏移量.据我所知,没有工具可以直接实现这一目标.

我正在使用IDA Pro评估版.我也对使用其他逆向工程框架的解决方案持开放态度.如果它是可编写脚本的,则是可取的.

我经历了一个类似的问题但是,建议的解决方案不适用于我的情况.

linux x86 assembly reverse-engineering elf

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

ELF程序头虚拟地址和文件偏移量

我知道两者之间的关系:

虚拟地址mod页面对齐==文件偏移mod页面对齐

但有人能告诉我这两个数字的计算方向是什么?

是否根据上述关系从文件偏移量计算虚拟地址,反之亦然?

更新

下面是一些更详细的信息:当链接器写入ELF文件头时,它设置程序头的虚拟地址和文件偏移量.(段)

例如,有以下输出readelf -l someELFfile:

Elf file type is EXEC (Executable file)
Entry point 0x8048094
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x08048000 0x08048000 0x00154 0x00154 R E 0x1000
  LOAD           0x000154 0x08049154 0x08049154 0x00004 0x00004 RW  0x1000
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x10
Run Code Online (Sandbox Code Playgroud)

我们可以看到2个LOAD段.

第一个LOAD的虚拟地址以0x8048154结束,而第二个LOAD从0x8049154开始.

在ELF文件中,第二个LOAD紧跟在第一个LOAD后面,文件偏移量为0x00154,但是当这个ELF加载到内存中时,它在第一个LOAD段结束后的0x1000字节处开始.

但为什么?如果我们必须考虑内存页面对齐,为什么第二个LOAD段不是从0x80489000开始?为什么它在第一个LOAD段结束后的0x1000字节处开始?

我知道第二个LOAD的虚拟地址满足关系:

虚拟地址mod页面对齐==文件偏移mod页面对齐

但我不知道为什么必须满足这种关系.

linux binary gcc elf

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