[Syntax] FASM in MASM konvertieren

Offizieller deutscher Support für das MASM32 SDK. Download FAQ

Moderatoren: crack, Krüsty, Marwin

[Syntax] FASM in MASM konvertieren

Beitragvon herman2k » Samstag 15. April 2006, 00:53

Hallo Forum Gemeinde,
ich habe mich noch nicht mit der MASM Syntax befasst, bräuchte allerdings Hilfe, da ich gerne den source von FASM in MASM konvertiert hätte. Ich hoffe jemand könnte mir dabei helfen :)

Code: Alles auswählen
IMAGE_BASE = 0x04000000
                     
_LoadLibrary = 0x5929C + IMAGE_BASE
_GetProcAddress = 0x592E4 + IMAGE_BASE
_CopyFileA = 0x5936C


IMPORT_ENTRY_NAME_PANDA = 0x5B308
IMPORT_ENTRY_PANDA_FIRST_THUNK = 0x5977C
BACK_TO_EP = 0x55700 + IMAGE_BASE

use32

mov ebx,IMAGE_BASE

mov edx,IMPORT_ENTRY_NAME_PANDA
add edx,ebx

push edx
call dword [_LoadLibrary]

mov edx,IMPORT_ENTRY_PANDA_FIRST_THUNK
mov edi,IMPORT_ENTRY_PANDA_FIRST_THUNK

add edx,ebx
add edi,ebx

.load_api_addresses:

cmp dword [edx],0
jz .finished_api_loading

mov ecx,[edx]

inc ecx
inc ecx

add ecx,ebx

push edx
push eax

push ecx
push eax
call dword [_GetProcAddress]

stosd

pop eax
pop edx

add edx,4
jmp .load_api_addresses

.finished_api_loading:

push BACK_TO_EP
ret



In Ollydbg sieht es dann so aus...

Code: Alles auswählen
004556E6 > $ BB 00004000    MOV EBX,patch.00400000                   ;  ASCII "MZP"
004556EB   . BA 08B30500    MOV EDX,5B308
004556F0   . 01DA           ADD EDX,EBX
004556F2   . 52             PUSH EDX                                 ; /FileName => "wsock32.dll"
004556F3   . FF15 9C924500  CALL NEAR DWORD PTR DS:[<&kernel32.LoadL>; \LoadLibraryA
004556F9   . BA 7C970500    MOV EDX,5977C
004556FE   . BF 7C970500    MOV EDI,5977C
00455703   . 01DA           ADD EDX,EBX
00455705   . 01DF           ADD EDI,EBX
00455707   > 833A 00        CMP DWORD PTR DS:[EDX],0
0045570A   . 74 18          JE SHORT patch.00455724
0045570C   . 8B0A           MOV ECX,DWORD PTR DS:[EDX]
0045570E   . 41             INC ECX
0045570F   . 41             INC ECX
00455710   . 01D9           ADD ECX,EBX
00455712   . 52             PUSH EDX
00455713   . 50             PUSH EAX
00455714   . 51             PUSH ECX                                 ; /ProcNameOrOrdinal
00455715   . 50             PUSH EAX                                 ; |hModule
00455716   . FF15 E4924500  CALL NEAR DWORD PTR DS:[<&kernel32.GetPr>; \GetProcAddress
0045571C   . AB             STOS DWORD PTR ES:[EDI]
0045571D   . 58             POP EAX
0045571E   . 5A             POP EDX
0045571F   . 83C2 04        ADD EDX,4
00455722   .^EB E3          JMP SHORT patch.00455707
00455724   > 55             PUSH EBP
00455725   . 8BEC           MOV EBP,ESP
00455727   . 83C4 F4        ADD ESP,-0C
0045572A   . 53             PUSH EBX
0045572B   . B8 D8544500    MOV EAX,patch.004554D8
00455730   . 68 84564500    PUSH patch.00455684
00455735   . C3             RETN                                     ;  RET used as a jump to 00455684



Der Code bewirkt das er ein DLL zur laufzeit ladet. In FASM kann ich es einfach als Binär Datei compelieren und den Code anschließend mit nen Hexeditor einfügen. Also es sollte nicht als eigenständige Win32 Datei compeliert werden!

Gruß,
herman2k
herman2k
Newbie
 
Beiträge: 2
Registriert: Freitag 14. April 2006, 23:51

Beitragvon crack » Samstag 15. April 2006, 17:01

hallo hermann,

mal ein paar Infos...

für welches Zielsystem du programmierst, teilst du dem Compiler durch die Direktiven im Header mit:

.model legt die zu Verwendende Speichernutzung fest
.386 bestimmt den zu verwendenden code

Ob eine exe, com oder bin Datei erzeugt wird bestimmst Du durch die Optionen des Linkers. dazu musst du dem linker einfach den Namen der Ausgabedatei als 'name.bin' vorschreiben.

So, wenn ich das richtig verstanden habe möchtest du mit dem Programm lediglich ein paar Funktionen aus einer DLL nachladen? Nun, da bietet die Windows Api dir entsprechende Procedure Calls für an:

.data
userdll db "meinedll",0
...
...

.code
...
invoke LoadLibrary, addr userdll
...


würde dann die benannte DLL in den Speicher laden, wie der Vorgang im einzelnen genau funktioniert lies doch bitte in den sehr guten Tutorial von Marilyn (Joachim Rohde) oder IceLion nach ...

greetz crack

[EDIT: Fehler im Layout berichtigt]
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon herman2k » Sonntag 16. April 2006, 13:57

Erstmal Danke für deine Antwort Crack :)
ich bin jetzt das ganze mal durchgegangen aber ehrlich gesagt bin leider nicht großartig weitergekommen :(

Ok ich habe ein Programm was in verbindung mit MASM laufen soll, dort sieht die syntax so z.B. aus ...

Code: Alles auswählen
test proc dwParam:dword

label:   xor   eax,eax
label:xor edx,edx
label:
   push   dword ptr fs:[eax]
   pop   dword ptr fs:[eax]

   mov   edx,1024
   mov   eax,256
   mov   eax,0

   mov   edx,0ABCDEFh
   mov   ecx,123h
   mov   eax,123456789
   mov   eax,1
   mov   eax,-1

   mov   edx,2
   mov   edx,-2

   shl   eax,1
   shr   edx,16

   je   @f
   jmp   @f
@@:
   jz   @b
   jmp   @f
   je   @b
@@:
   jmp   @b

   jmp   @f

@@:
   mov   eax,0
   jmp   @b
   jne   @b
   jmp   @f
@@:
   mov   eax,dwParam
   xor   eax,eax
   sub   eax,eax
   mov   eax,100
   mov   edx,100
   mov   eax,0
   mov   edx,0
   mov   ecx,MB_ICONINFORMATION
   mov   edx,IDD_DIALOG1
   xor   eax,100h
   xor   edx,-100h
   add   eax,100h
   add   edx,-100h
   sub   eax,100h
   sub   eax,-100h
   and   eax,111b
   mov   eax,offset MessageBoxA
   mov   edx,offset MessageBoxA+1

   call   ExitProcess

   ret
test endp


nun habe ich dabei Schwierigkeiten das ganze mit meinen code kompatibel zu machen! Wo befinden sich bei mir die Label und wozu sind die "@" Zeichen ?

Frohe Ostern übrigens noch,
herman2k
herman2k
Newbie
 
Beiträge: 2
Registriert: Freitag 14. April 2006, 23:51

Beitragvon crack » Montag 17. April 2006, 09:55

Ja, frohe Ostern :)

Hm, das ist ja nur eine einzelne Prozedur, und der Gesamte Header fehlt ...
Und diese Syntax ist mir im Zusammenhang mit MASM32 auch nicht bekannt, das sieht mir eher für Quellcode für den A386 von Eric Isaacson aus (oder vielleicht für den Originalen Assembler von Intel?). Nun, egal wie dem auch sei, ich werde mir den Thread mal in ein Word Doc kopieren und dann mal in aller Ruhe sehen was es da umzuschreiben gibt, ich muss allerdings sagen das Ich den FASM nicht kenne, aber ich hab mir den mal runtergeladen...
Was mich noch etwas irritiert: Wieso willst Du denn das Prg. in eine Bin Datei compilieren? .bin Dateien sind gewöhnlicherweise zum Proggen von EPROMs gedacht: Typisches Kennzeichen einer Bin Datei ist das der Offset 0 ist, ein anderer Fall sind so einige Betriebssystemdateien von DOS/Win die auch als .bin Datei vorliegen (müssen). Für eine 'gewöhnliche' Anwendung unter DOS/Win ist jedoch immer die .exe das günstigste Format.

mfg. crack

PS. nun, wie gesagt, nur eine DLL oder Bestandteile dieser Laden ist relativ einfach zu bewerkstelligen, um welche DLL handelt es sich? Um auf die Funktionen der DLL zugreifen zu können benötigst Du eine entsprechende .lib Datei, aber diese kann man aus der DLL generieren. Möchtest Du DLL des Panda Anti Virus benutzen? Nun, wenn ch da ein paar nähere Angaben hätte könnte ich dir da bestimmt ein gutes Stück weiterhelfen ...
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu MASM32-Package

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag
  • masm und gcc
    von Gast » Dienstag 2. März 2004, 22:23
    1 Antworten
    983 Zugriffe
    Letzter Beitrag von Marwin Neuester Beitrag
    Mittwoch 3. März 2004, 14:10
  • Handbuch zu MASM?
    von Gast » Samstag 17. Mai 2003, 23:20
    6 Antworten
    1722 Zugriffe
    Letzter Beitrag von CDW Neuester Beitrag
    Freitag 24. Oktober 2003, 18:18
  • MASM-Neuling...
    von Gast » Sonntag 10. August 2003, 19:15
    7 Antworten
    1357 Zugriffe
    Letzter Beitrag von Marwin Neuester Beitrag
    Freitag 10. Oktober 2003, 16:25
  • Masm deinstallieren
    von Gast » Samstag 1. Mai 2004, 12:15
    1 Antworten
    1146 Zugriffe
    Letzter Beitrag von Marwin Neuester Beitrag
    Samstag 1. Mai 2004, 13:00
  • MASM und Addressierungsarten des 386
    von Gast » Dienstag 29. Juni 2004, 15:55
    3 Antworten
    910 Zugriffe
    Letzter Beitrag von Marwin Neuester Beitrag
    Samstag 10. Juli 2004, 13:06

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron