Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Binärcode einbinden?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.04.2009, 01:51 Uhr
~nexgen
Gast


Hab da mal eine Frage...
Angenommen, ich habe eine binäre Datei, die ich mit einem Programm von A nach B kopieren möchte. Dabei wollte ich mir fopen() und Ähnliches sparen und die Datei direkt in das Programm einbinden (da sie sich nicht mehr ändert). Könnte man das mit dem Linker machen? Und woher weiß ich überhaupt die Start-/Offsetadresse der Datei? Wird die Datei (vom Linker) überhaupt "in einem Stück" angehängt? Irgendwelche Compilerschalter? Labels?

Programmiermodell: C89
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.04.2009, 23:30 Uhr
~nexgen
Gast


Also, ich hab da noch mal etwas nachgedacht...
Zuallererst vergesst mal, was ich erzählt habe - ich muss eigentlich nur folgende Dinge wissen:
1.) Wo kann man auslesen, an welcher Speicheradresse sich das eigene Programm befindet
2.) Wo kann man auslesen, wie viel Byte das eigene Programm belegt
3.) Wie kann man Binärcode an ein Programm anhängen (Aus zwei Dateien mach eine)

1.) und 2.) muss man ja irgendwo aus dem Dateisystem auslesen können (Directory Entry?, File Control Block?, ...). Man sieht, ich habe Ahnung von der Materie.

3.) ist jetzt auch kein großes Ding. Frage ist nur, ob man das direkt mit einem Linker machen kann oder ob es eine Compileranweisung gibt, womit man Binärdatei XYZ innerhalb des Programms einfügen kann. Davor noch ein Label gesetzt und schon kann man das Offset berechnen.

Möglich muss das auf jeden Fall sein, Frage ist nur wie bequem das Ganze geht.
Von mir aus auch in/mit Assembler.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.04.2009, 23:54 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von ~nexgen:
Hab da mal eine Frage...
Angenommen, ich habe eine binäre Datei, die ich mit einem Programm von A nach B kopieren möchte. Dabei wollte ich mir fopen() und Ähnliches sparen und die Datei direkt in das Programm einbinden (da sie sich nicht mehr ändert).

also eine Datei von A nach B kopieren erledigt man normalerweise mit Systembefehlen wie copy oder move. Ein Programm dafür schreibt man eigentlich nur, um sich mit dem Dateihandling einer Programmiersprache vertraut zu machen, ansonsten braucht man es nicht.
Und ein Programm, das ein anderes in seinem Code enthält, das es irgendwo hinschreibt, ist formal betrachtet ein Trojanisches Pferd. Und Trojanische Pferde gehören bekanntlich zu den Schadprogrammen, die kein Mensch braucht. Und das dürfte auch der Grund sein, warum Du bisher keine antworten auf die Fragen bekommen hast, abgesehen davon, das wir uns strafbar machen, wenn wir Anleitungen oder Hinweise zur Entwicklung solcher Programme geben.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 16.04.2009 um 23:55 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.04.2009, 00:22 Uhr
~nexgen
Gast


Na ja, früher oder später komme ich ja sowieso dahinter.
...und wer denkt denn gleich an Trojaner? tztztz
Ich wollte lediglich eigenen Code in den Speicher schreiben und zu einem späteren Zeitpunkt "starten", aber hast schon recht - klingt irgendwie nach BÖSE.
Ich dachte ja auch eigentlich eher an sowas wie z. B. einen Bootloader, aber da fehlen mir wohl noch ein paar andere Kenntnisse...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.04.2009, 00:28 Uhr
Hans
Library Walker
(Operator)


Hi,
wenn Du mehr an Bootloader denkst, dann solltest du das sofort schreiben; - jetzt glaubt Dir das eh keiner mehr. Und wozu soll man Code in den Speicher schreiben, der erst später ausgeführt wird? - Aber es ist richtig, Dir fehlen da noch einige Kenntnisse.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.04.2009, 11:22 Uhr
~kronos
Gast



Zitat von ~nexgen:

1.) Wo kann man auslesen, an welcher Speicheradresse sich das eigene Programm befindet

Was willst du damit? Direkt zugreifen kannst du darauf eh nicht. Die Addresse auf des Festplatte hat nichts mit C-Pointern zu tun, die zeigen nur in den Arbeitsspeicher.


Zitat:
2.) Wo kann man auslesen, wie viel Byte das eigene Programm belegt

Mit dem Befehl ls -l

Zitat:


[quote]3.) Wie kann man Binärcode an ein Programm anhängen (Aus zwei Dateien mach eine)

cat anhang >> programm

Um den Offset zum Anhang zu finden musst du entweder ziemlich genau wissen wie der Compiler die Datei aufbaut oder - was vermutlich schneller geht - ausprobieren. In jedem Fall ist es viel einfacher zwei Dateien zu kopieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.04.2009, 12:37 Uhr
mike
Pinguinhüpfer
(Operator)


Wo er ist steht im EIP Register. Das OS hat irgendwo ein struct wo es das Speichern (um den Kontext zu erhalten) - also musst es da auslesen wenn das Programm grade nicht läuft.

Binärdaten im Speicher kannst mit exec überschreiben wenn du selbst grade am Zug bist. Fremden Bereich überschreiben - das sollte dir fast nicht möglich sein

EDIT: Zieh dir mal das rein www.linuxjournal.com/article/6100
--

Dieser Post wurde am 18.04.2009 um 12:46 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: