首先,抱歉我的英语不好。 我试着在linux上获取excute文件的内容。但是有一个错误。 而不是显示所有内容。它只显示其中的一部分
Myfile是b.out: quan @quan-desktop:〜/ quanrocktest / tuan1 $ cat b.out ELFquan 0 44($!44 4 44 4 .... ... 4444 等等... b.out是一个ELF文件
我的代码:
#include <stdio.h>
#include“stdlib.h”
int main(){
FILE *file;
char *buffer;
unsigned int fileLen;
//Open file
file = fopen("/home/quan/quanrocktest/a/b.out", "r");
//Get file length
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
//Allocate memory
buffer=(char *)malloc(fileLen+1);
if (!buffer)
{
fprintf(stderr, "Memory error!");
fclose(file);
return 0;
}
//Read file contents into buffer
fread(buffer, fileLen, 1, file);
fclose(file);
printf("len is %d \n",fileLen);
//Do what ever with buffer
printf("%s",buffer);
free(buffer);
返回0; }
结果:
quan @quan-desktop:〜/ quanrocktest / a $ g ++ init.c
quan @quan-desktop:〜/ quanrocktest / a $ ./a.out
len是8256
ELFquan @ quan-desktop:〜/ quanrocktest / a $
a.out只显示
ELFquan
当我使用vi或cat时,b.out仍然显示得很好
答案 0 :(得分:0)
"%s"
的{{1}}格式说明符旨在与以NULL结尾的字符串一起使用。因此,您对printf()
的调用将停止在ELF图像中的第一个NUL字节处。
答案 1 :(得分:0)
使用实用程序对于新手来说比编写程序更快捷。
您应该尝试 nm(1) , objdump(1) 或 readelf(1) 。这些工具有很多选择。它们用于列出可执行文件或目标文件的内容。
如果您想查看裸文件内容,则应使用 hexdump(1) 或 ghex2 (它需要图形系统,如Gnome桌面)。
祝你好运!是的,另一件事:如果你不知道,为什么printf()以这种方式工作,我建议你不要破解可执行文件。你现在不需要它。