Wo liegt mein Fehler? g++ mit -e (--entry)
-
Aahhh... jetzt verstehe ich das. Ihr habt eine Art Präprozessor, der, je nach Konfiguration, bestimmte Funktionalität ergänzt. Und bevor du jetzt was in den Quelltext einfügst und aufgrund irgendwelcher seltsamen Quelltextformatierung den Quelltext zerstörst möchtest du vor und nach der
main
Funktion eigene Funktionen aufrufen, die am besten auch noch die Kommandozeilenparameter mitbringen?
Muss das plattformunabhängig sein oder auch darf´s auch plattformspezifisch sein? Sind DLLs eine Option?
-
Ich habe noch einen interessanten Artikel gefunden: Linux x86 Program Start Up or - How the heck do we get to main()?
Und in der Antwort zu "Alternative way to obtain argc and argv of a process" wird ein Weg gezeigt, wie man (evtl.) selber an die Kommandozeilenparameter (Argumente) kommt (wenn auch mit keiner Garantie).
Eine weitere Antwort dadrin benutzt Prozess "proc file system".
-
Mal blöd gefragt, kann man das tool, welches den code erzeugt den du anpassen sollst, nicht anpassen, dass zu mindestens der main() part günstiger für deine Anpassungen ist?
Das wäre aus meiner sicht deutlich einfach als jetzt irgendwie durch hacks da was zurecht zu biegen.Falls eine Anpassung am generator des codes nicht möglich sein sollte hätte ich da eine Idee.
Wenn ich das ganze richtig verstanden habe sollst du den code, der aus dem Generator rausfällt mit zusätzlicher funktionalität ausstatten.
Und aus diesem modifizierten code wird dann das Programm erzeugt.
Wenn du eh am code "rumfummelst" wiso benennst du die vorhandene main() methode nicht einfach um und fügst deine main hinzu welche dann die umbenannte original main() methode aufruft.int main(int argc, char**argv){/*code*/}
->
int orig_main(int argc, char**argv){/*code*/} int main(int argc, char**argv) { /*pre code*/ int returnVal = orig_main(argc, argv); /* post code */ return returnVal; }
-
Stimmt, man könnte sogar einfach den bestehenden Source-Code über die Kompileroptionen mit dem Define
-Dmain=orig_main
kompilieren und dann in einer neuen Source-Datei die neuemain
definieren.
-
- Ja, genau das.
- Es sollte plattformunabhängig sein, zwar sind dll/so schöne Optionen, jedoch abhängig vom System.
@Th69
Auch hier - super Ideen! Ich habe selbst schon an direkten ASM-Eingriff gedacht, verwarf es aber aufgrund meiner fehlender Kenntnisse / Zeit. Die Möglichkeit von /proc hatte ich schlichtweg nicht bedacht! Ich habe zwar schon öfters darüber Daten abgefragt, jedoch war mir die Option der cmdline für ein Programm nicht aufgefallen.
@firefly Jaaa... Was wäre, wenn main() irgendwo anders (ggf. andere Datei, oder gar .o) refernziert wird? Die Lösung von Th69 mit der Prepocessor-Option macht diese Arbeit des Findens und Korrigierens automatisch.
@Th69 *Geistesblitz*Meine finale Lösung sieht nun so aus:
- Kompilierung des Originalcodes mit -Dmain=orig_main in .o
- Generieren / Erstellen einer neuen Datei mit neuer main() - diese wird die Post-Main-Funktionen via atexit() registrieren und die Argumente (Programmparameter) weiter verarbeiten. Danach erfolgt der Aufruf der originalen main().
- Rekompilierung mit dem neuen Quellcode und den .o.
- Voilá!
Sollte ich noch Probleme kriegen, melde ich mich! Vielen, vielen dank!
Ihr habt echt klasse Ideen / Arbeit geleistet,
Simonmicro
-
@simonmicro Es war nur ein Beispiel wie es im endeffekt aussehen könnte
Ob das jetzt durch text ersetzung im code selbst oder über den preprocessor, ist dann doch egal.
-
@Simonmicro: Würdest du uns noch verraten, was du genau einkompiliert hast?
-
@Th69 Nun, reinkompiliert wird ein Timer, bevor das Programm startet - ebenso ein Listener auf eine Datei, um das Programm bei deren Modifikation sofort beendet wird. Da der eigentliche Programmteil potentieller Schadcode ist erschien mir das als notwendig. Ich plane das Programm danach auf ASM-Ebene durch "Sinnfreien ASM-Code" unkenntlich zu machen. Mal sehen, ob das alles so klappt. Ist ja auch nur eine zufällige Idee...
-
Depending on the settings, you have a preprocessor of some sort that adds particular functionality. Do you want to call your own functions before and after the mainfunction before you write anything else into the source code and afterwards obliterate it owing to some odd source code formatting.
-
I have an X-any code that should be specially compiled thanks to a.sh script; it should thereafter (at runtime), for example, be able to ask additional command line options, for example, a to control "before-the-main" timers, or to directly read the return codes. I don't want to alter the actual routines because I don't know how dreadfully the author has formatted them; if I do, the code might be wiped out or something similar if I put my changes. I want to build everything, thus the source codes are of course available.
-
__attribute__ ((constructor))
und__attribute__ ((destructor))
?
-
Es handelt sich mal wieder um einen Fall von Nekromantie.
-
@john-0
Ich finde den Fall etwas suspekt. Er (oder es) hat zweimal geantwortet. Einmal auf DocShoe und einmal simonmicro. Und dann antwortet er auf Englisch, obwohl der ganze Thread Deutsch ist.Klingt für mich nach einen Bot.
-
That would be lot simpler in my opinion than the current method of hacking something to make it right.
-
@Quiche-Lorraine sagte in Wo liegt mein Fehler? g++ mit -e (--entry):
@john-0
Ich finde den Fall etwas suspekt. Er (oder es) hat zweimal geantwortet. Einmal auf DocShoe und einmal simonmicro. Und dann antwortet er auf Englisch, obwohl der ganze Thread Deutsch ist.Klingt für mich nach einen Bot.
Spammer lernen eben auch dazu... Wenn alte Threads oder chinesische Antworten keinen Effekt mehr erzielen, so schwenkt man eben auf Englisch um...
-
Dieser Beitrag wurde gelöscht!