variable binär definieren...
-
Gibt's Deine Fragen eigentlich auch in verständlich?
-
nein
-
buntehaare schrieb:
kann man auch diese zeile in der binär datei definieren?
case RED: red =b[1];break;
nein. das würde bedeuten, dass du den bereits kompilierten code zur laufzeit änderst. das geht m.w.n nicht mit c.
du kannst das switch-case sparen, wenn du rgb werte benutzt:
0x00bbggrr
-
Ich denke darauf möchte er hinaus.
Es soll schon comiliert sein, also binär.
Ist jetzt aber nur ne vermutung bzw eine interpretation seiner Frage
-
könnte ich zb aus der binär datei code in einen von der linux,binary reservireten speicher laden der dann abgearbeitet wird, bzw das der reservierte speicher wärend der laufzeit ständig abgearbeitet wird und ich so dynamisch externen (von datei geladenen) binärcode laden kann der eben zb.: red=123;green=134; enthält?
-
Und wir rollen schon wieder eine Kristallkugel durchs Forum - ich war mir auch nicht sicher, was der will, einen iniparser eher nicht, aber was dann
buntehaare schrieb:
könnte ich zb aus der binär datei code in einen von der linux,binary reservireten speicher laden der dann abgearbeitet wird, bzw das der reservierte speicher wärend der laufzeit ständig abgearbeitet wird und ich so dynamisch externen (von datei geladenen) binärcode laden kann der eben zb.: red=123;green=134; enthält?
Wow! Gibt's das auch auf Deutsch?
-
vorkompilierten binärcode laden und "starten"
-
Nee, nicht besser.
Du kannst natürlich etwas binär wegschreiben und bei Programmstart laden (sh. fopen&Co). Aber so hat es ja angefangen und scheint Dir nicht zu taugen.
-
ein jmp befehl bei ASM beutetet doch dass der processor auf eine bestimmte &Addresse innerhalb des zu ausführenden programm springt?
zb.:
0x00298 .... 0x00299 test a,b 0x00300 mov ah,2 0x00301 mov al,12 0x00303 jmp 0x00500 0x00304 jmp 0x00300 0x003.. ....
könnte man jez zb wärend der laufzeit die zeilen 0x00300 und 0x00301 austauschen würde anderer code verarbeit, ist das möglich wenn ja bitte einen vorschlag (was mein eigentliches ziel der frage ist)
zb.:
0x00298 .... 0x00299 test a,b 0x00300 mov bx,bl 0x00301 mov bh,12 0x00303 jmp 0x00500 0x00304 jmp 0x00300 0x003.. ....
-
Das ist schon möglich. Aber dafür benötigst du einen Just-In-Time Compiler und wahrscheinlich auch noch eine Virtual Machine, da du die Strukturen deines Programms zur Laufzeit nicht einfach so verändern kannst (OS lässt dich nicht usw.).
-
vllt dll injection... ist zwar was anderes, aber vllt eine lösung fr sein Problem, von dem ich nicht mal weiß, welches es überhaupt ist...
-
Jein. Auf ganz alten Maschinen ging so was im Real-Mode, auf mittelalten Maschinen wurde der betreffende Teil des Protected-Mode durch ein neues Speichermodell ausgehebelt. Auf neueren Maschinen ist üblicherweise wieder nur das Codesegment ausführbar (vgl. NX-Bit, XD-Bit, DEP). Ein solches Verhalten ist in aller Regel aus Sicherheitsgründen nicht wünschenswert - ein Cracker könnte so beispielsweise einen Buffer-Overflow ausnutzen, um Binärcode in den Speicher zu laden und auszuführen (in der Tat ist das eine der häufigsten Sicherheitslücken).
Mit anderen Worten, möglicherweise geht so was auf deiner Maschine, aber es gibt keinen verlässlichen Weg. Was du aber machen kannst, ist, Module erst zur Laufzeit dynamisch an das Programm zu linken. Schlag je nach Plattform dlsym, dlopen und dlclose (POSIX) oder LoadLibrary, GetProcAddress und FreeLibrary (WinAPI) nach.
-
buntehaare~ schrieb:
könnte man jez zb wärend der laufzeit die zeilen 0x00300 und 0x00301 austauschen würde anderer code verarbeit, ist das möglich wenn ja bitte einen vorschlag (was mein eigentliches ziel der frage ist)
Selbstmodifizierender Code ist in C nicht vorgesehen, da alle Methoden zur Compiletime bekannt sein müssen. Gilt auch eher als krumme Methode und moderne Architekturen versuchen sowas sowohl prozessorseitig als auch vom OS her, sowas zu verbieten.
Aber den Zeiger auf eine Funktion kannst Du jederzeit ändern und dann den Zeiger (dereferenziert) ausführen lassen. Bei newty.de gibt es ein recht ausführliches Function Pointer Tutorial.