Generowanie kodu maszynowego w VS

0

Witam.
Staram się uzyskać kod maszynowy pewnego kodu który wykorzystuje WinApi.
w VS ustawiłem flagę /FAc i w pliku wyjściowym otrzymuję coś takiego

 
  00106	57		 push	 edi
  00107	8d 8d fc f7 ff
	ff		 lea	 ecx, DWORD PTR _buf$[ebp]
  0010d	68 00 00 00 00	 push	 OFFSET ??_C@_15KNBIKKIN@?$AA?$CF?$AAd?$AA?$AA@
  00112	51		 push	 ecx
  00113	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__wsprintfW
  00119	83 c4 0c	 add	 esp, 12			; 0000000cH

Mam już własny konwerter który zamienia to na kod maszynowy, lecz problemy pojawiają się kiedy korzystam z WinApi, wszystkie calle wyglądają tak samo (wskazują na 0)
FF1500000000 call dword [dword 0x0] a tu jest call DWORD PTR __imp__wsprintfW
przez co kod ze względów oczywistych nie ma prawa działać i jedyne co mogę zrobić to skompilować do dll.
Mi jednak zależy na kodzie maszynowym, czy jest na to jakaś metoda??

PS. Tego co wymyślił to winapi powinni rozstrzelać, zawsze jakieś kłody pod nogi...

0

A co ma wywróżyć z fusów pod jakim adresem znajdzie się funkcja? Tam nie masz tablicy importów. To samo masz przy push tych gdzie na stos idzie coś co w pliku wykonywalnym ma się znaleźć pod określonym adresem.

0

I dla tego właśnie pytam czy da się jakoś wygenerować takie kod maszynowy który będzie działał?? Z technicznego punktu widzenia nie jest to niemożliwe, można by np wstawić wszystkie potrzebne dane na samym końcu kodu maszynowego, adresowanie trochę by się zmieniło ale nadal jest to chyba wykonywalne??

0

Może zapytam tak: co chcesz osiągnąć?

0

Chcę zrobić wstawkę do funkcji do Autohotkey'a, zamiast kopiować niepotrzebnie dll to po prostu wkleja się kod maszynowy, odpowiednio go ładuję do pamięci i wywołuje się go dokładnie tak samo jak dll z tym, ze nie podaję nazwy funkcji tylko adres w pamięci gdzie jest kod maszynowy.
Jest to o tyle wygodna metoda, że nie trzeba się martwić wysyłaniem plików itd tylko udostępniasz text.

MCode(Hex2Bin,"568b74240c8a164684d2743b578b7c240c538ac2c0e806b109f6e98ac802cac0e10"
. "4880f8a164684d2741a8ac2c0e806b309f6eb80e20f02c20ac188078a16474684d275cd5b5f5ec3")

hex = 1089abefFABE5
VarSetCapacity(bin, ceil(StrLen(hex)/2), 99)
DllCall(&Hex2Bin, "UInt",&bin, "UInt",&hex, "CDECL")
 
0

@smarq chcesz zrobić binarkę która nie potrzebuje "zależności" w postaci WinAPI? Mam wątpliwości czy coś takiego da się osiągnać ;)

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