• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

info zu einer Exe datei

MatzeED7

Newbie
Hallo,

für ein projekt suche ich sehr genaue informationen zu dem dateiformat einer *.exe datei.
speziel zb wie sie aufgebaut ist(header und so) und wie man sie sich anzeigen lassen
kann(also den bin.code in lesbare binärzahlen)

habe schon mit od bzw hexdump und des weiteren einen disassemblierer verwendet, bin mir aber net sicher ob zb hexdump den gesamten inhalt der exe ausgibt oder obe es nur eine
vereinfachte darstellung ist

Suche also ein prog das mir da weiterhilft oder
kann mir wer helfen? wo könnte ich nach genauen informationen suchen?

Gruss Matze
 
A

Anonymous

Gast
MatzeED7 schrieb:
bin mir aber net sicher ob zb hexdump den gesamten inhalt der exe ausgibt oder obe es nur eine
vereinfachte darstellung ist
Da kannst du ruig hexdump oder od vertrauen, die Programme sind so dumm, dass sie einfach jedes Byte genau so nehmen wie es dort in der Datei steht und so ausgeben wie du es ihm sagst.
Code:
 # hexdump -C tmp.txt
00000000  76 65 72 65 69 6e 66 61  63 68 74 65 20 64 61 72  |vereinfachte dar|
00000010  73 74 65 6c 6c 75 6e 67  20 69 73 74 0a 0a        |stellung ist..|
0000001e

ansonsten
Code:
 # file Programm
Programm:  ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

google ELF LSB SYSV usw.... , dann bekommst du auch deine Informationen zB.
http://www.cs.ucdavis.edu/~haungs/paper/node11.html

Das sollte mit jedem Dateitype funktionieren

robi
 
OP
M

MatzeED7

Newbie
ja, danke für deine antwort,

nun stellt sich mir aber die frage, wie ich aus den hex/octal zahlen die
eigentlichen binären maschinenbefehl ermittel kann und ob das überhaupt möglich ist?
gibt es denn auch eine art binary dump wo man statt den hex zahlen binärwerte erhält

was mich auch ein bissel verwundert ist, das in der ELF bescheibung, zb wie in dem vorgeschlagenen link zb der header als typedef struct definiert wurde,
aber wie kommt man den an einen header in einer exe ran, ist der denn schon binär oder erst der im header verlinkte code?
 
A

Anonymous

Gast
Was du wirklich suchst wirst du eventuell hier finden, aber Vorsicht immer schön die Lizensen beachten :wink:
http://www.thefreecountry.com/programming/disassemblers.shtml

Anhand deiner Fragestellungen habe ich jedoch arge Bedenken, dass dein Basiswissen wohl nicht ganz ausreicht.

robi
 
OP
M

MatzeED7

Newbie
also wenn ich mir recht überlege, ist ein teilziel meines projektes einen
eigenen kleinen disassembler zu schreiben. dies setzt aber voraus , das ich einen weg finde an die daten der exe ranzukommen und diese dann parsen kann
 
MatzeED7 schrieb:
nun stellt sich mir aber die frage, wie ich aus den hex/octal zahlen die eigentlichen binären maschinenbefehl ermittel kann und ob das überhaupt möglich ist?
http://www.sparc.com/standards/SPARCV9.pdf
wo's was von Intel gibt musst du selbst mal sehen.
gibt es denn auch eine art binary dump wo man statt den hex zahlen binärwerte erhält
Das brauchte bisher keiner... und das wird dir auch nicht soviel weiterhelfen, da gleichnamige Instruktionen wie sie im Assembler-Source auftreten, als verschiedene Bitmuster encodiert werden können. Unter SPARC ist das weniger der Fall als unter x86, weil ersteres ein "aufgeräumtes" Instruction Set, was - wie wir wissen - bei x86 nicht der Fall ist.
was mich auch ein bissel verwundert ist, das in der ELF bescheibung, zb wie in dem vorgeschlagenen link zb der header als typedef struct definiert wurde, aber wie kommt man den an einen header in einer exe ran, ist der denn schon binär oder erst der im header verlinkte code?
Bytes einlesen, und das Layout der struct auf die Bytes anwenden. Ja, so passieren die Dinge - sehr einfach.
 
OP
M

MatzeED7

Newbie
halle, danke für diese antwort,

aber ich bin mir immer noch nicht sicher wie ich in der exe datei an die encodierten bitmuster herankommen kann um diese dann auswerten zu können. kann ich nun hierfür die mit hexdump erzeugte ascii datei verwenden. wenn ja, hat diese datei dann auch das ELF dateiformat?

Also wie hast du das gemeint, das mit den byte einlesen und dann die struct anwenden????

Da ich noch anfänger bin, brauch ich bitte nochmal eine genauere erklärung
 
Du willst einen Disassembler schreiben (STAUN)?
Viel glück dabei!

Wenn ich das richtig weis (aber ich lasse mich gern eines besseren belehren) ist es so gut wie ausgeschlossen, so etwas herzustellen.
Es sei denn, man weis genau, mit welchem Compiler der Quellcode compiliert wurde und wie dieses Ding arbeitet.
Das grundsätzlich Problem, das sich hier noch zusätzlich stellt ist: selbst der gleiche Compiler schreibt manchmal aus dem gleichen Code eine andere Binärdatei.
Dazu kommt noch, dass du wissen müsstest, in welcher Programmiersprache der Quellcode programmiert wurde und du solltest diese Sprache dann auch wenigstens verstehen, denn sonst ist das genauso auch nur ein Kauderwelsch für dich.

Mein Fazit: Versuchs garnicht erst, es sei denn, du kennst eine wirklich gute Nervenklinik. :lol:
 
OP
M

MatzeED7

Newbie
für mein projekt kann ich davon ausgegen, das das genaue quellprogramm in der hochsparche(für mich C) und die compilerversion (gcc 4) bekannt ist

ich bin auch schon ein stück weiter gekommen, bin mir aber immer noch net sicher ob ich auf dem richigen weg bin

wenn man gcc test.c eingibt kann man anschliessend sich informationen aus der erzeugten a.out datei mit readelf -a a.out anzeigen lassen!
 
MatzeED7 schrieb:
halle, danke für diese antwort,

aber ich bin mir immer noch nicht sicher wie ich in der exe datei an die encodierten bitmuster herankommen kann um diese dann auswerten zu können. kann ich nun hierfür die mit hexdump erzeugte ascii datei verwenden. wenn ja, hat diese datei dann auch das ELF dateiformat?
Besorg dir mal ein C-Buch, wo structs direkt in Dateien geschrieben werden. AKA
Code:
int fd = open("/bin/ls", O_RDONLY);
Elf32_Ehdr foo;
read(fd, &foo, sizeof(foo));
printf("Identifikationsstring: %.4s\n", foo.e_ident);
Q.E.D.
 
OP
M

MatzeED7

Newbie
kannst Du mir ein gutes Buch empfehlen? Die die ich hab kann man voll vergessen!

Kannst Du mir noch mal deinen code erleutern, da ich noch net so viel mit dateienbearbeitung mit der programmiersprache C gemacht habe bzw die abkürzungen sagen mir net viel!

danke noch mal für deine bemühungen!
gruss Matze
 
OP
M

MatzeED7

Newbie
hab mal ein bissel rum getestet?

Code:
#include <stdio.h>
#include <elf.h>

int main(int argc, char* argv[])
{
        FILE *file = NULL;
        Elf32_Ehdr header;
        file = fopen(argv[1], "r");
        if (file == NULL)
                perror("fopen\n");
        if (fread(&header, sizeof(Elf32_Ehdr), 1, file) != 1)
                perror("fread\n");

	printf("Identifikationsstring: %.4s\n", header.e_ident); 
	
        return 0;
}

meinst du diesen weg um die exe auszulesen?
 
Oben