Kłopot z modyfikacją pamięci programu

0

Mam taki kod

procedure TForm1.FormCreate(Sender: TObject);
begin

asm
@@DoZmodyfikowania:
int 3
nop
nop
nop

mov eax, offset(@@DoZmodyfikowania)
mov byte ptr[eax],90h

end;

end;

po tym dostaję wyjątek Access Violation

pytanie brzmi jak powinien wyglądać kod żeby można było edytować pamięć programu? prawdopodobnie trzeba użyć funkcji VirtualProtect ale co i jak nie wiem.

0

fajnie że mi pomogliście

0

No tak, przecież nikt CELOWO nie odpisał na Twój wątek, aby zrobić Ci na złość.
To wcale nie mogło być tak, że ktoś z odpowiednią wiedzą po prostu nie trafił na ten temat i wystarczyłoby zrobić zwykłe podbicie (bump), a nie wielkie żale do społeczności. Co niby ten Twój ostatni post ma wnieść do tematu, co?

Odnośnie problemu (tak, dla przykładu ja dopiero teraz natrafiłem na ten wątek): na pewno nie odwołujesz się do pamięci tylko do odczytu? Plus czy na pewno rejestr eax ma odpowiednią wartość? (sprawdź pod debuggerem)

5

W czym pomóc jak człowieku totalnie nie wiesz co piszesz jakie charakterytyki ma sekcja .code raczej nie do zapisu? No to czego chcesz zgadłeś VirtualProtect potrzeba i w czym masz problem?

var
  oldProtect: Cardinal;
begin
asm
  @@DoZmodyfikowania:
  int 3
  nop
  nop
  nop
  mov eax, offset(@@DoZmodyfikowania)
  push eax //na stos adres bo wywolanie VirtualProtect nam go nadpisze
  lea edx, oldProtect
  push edx
  push PAGE_READWRITE //ha :)
  push 1 //1 bajt do zmodyfikowania wiec taki rozmiar (SizeOf(Byte))
  push eax  //adres
  call VirtualProtect
  pop eax
  mov byte ptr [eax],90h
end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1