Pogadalem z nim i wiem juz o co chodzi w uproszczeniu problem wyglada tak:
Mamy prosty kod w C++:
#include <cstdio>
extern "C"
{
char* test();
}
int main()
{
printf("%s\n", test());
printf("%s\n", test());
return 0;
}
I kod w ASM (kompilator: NASM):
global _test
segment data
text1: DB "krzysiu1", 0
text2: DB "krwq", 0
segment code
input_start:
mov eax, text2
input_end:
_test:
push ebp
mov ebp, esp
output:
mov eax, text1
mov esi, input_start
mov edi, output
mov ecx, input_end-input_start
cld
rep movsb
leave
ret
chcialem zeby kod zmodyfikowal sam siebie zamieniajac instrukcje "mov eax, text1" na "mov eax, text2" (uproszczony przypadek, w ogolnosci po prostu ma kopiowac input do output, z zalozeniem ze oba maja taki sam rozmiar).
Po zlinkowaniu i odpaleniu output programu ma wygladac tak:
krzysiu
krwq
z asm jestem cienki. moge tylko powiedziec ze powyzszy kod sie crashuje i nie mam pomyslu jak to naprawic, moglby ktos pomoc? Czy moj kod jest bledny czy OS nie pozwala na modyfikacje segmentu .CODE? jesli opcja numer 2 to jak temu zapobiec? da sie jakos zezwolic na modyfikacje segmentu?