IDA Pro vs. OllyDebugger



  • Hallo ich hab gerade die StdOut Funktion von MASM mir im Disassembler angeschaut.

    IDA erstellt folgendes:

    text:00401054                 push    ebp
    .text:00401055                 mov     ebp, esp
    .text:00401057                 add     esp, 0FFFFFFF8h
    .text:0040105A                 push    0FFFFFFF6h      ; nStdHandle
    .text:0040105C                 call    GetStdHandle
    .text:00401061                 mov     [ebp+hFile], eax
    .text:00401064                 push    7               ; dwMode
    .text:00401066                 push    [ebp+hFile]     ; hConsoleHandle
    .text:00401069                 call    SetConsoleMode
    .text:0040106E                 push    0               ; lpOverlapped
    .text:00401070                 lea     eax, [ebp+NumberOfBytesRead]
    .text:00401073                 push    eax             ; lpNumberOfBytesRead
    .text:00401074                 push    [ebp+nNumberOfBytesToRead] ; nNumberOfBytesToRead
    .text:00401077                 push    [ebp+lpBuffer]  ; lpBuffer
    .text:0040107A                 push    [ebp+hFile]     ; hFile
    .text:0040107D                 call    ReadFile
    .text:00401082                 mov     eax, [ebp+NumberOfBytesRead]
    .text:00401085                 leave
    .text:00401086                 retn    8
    

    OllyDebugger erstellt das hier:

    0040108C   /$  55                PUSH EBP
    0040108D   |.  8BEC              MOV EBP,ESP
    0040108F   |.  83C4 F4           ADD ESP,-0C
    00401092   |.  6A F5             PUSH -0B                                                  ; /DevType = STD_OUTPUT_HANDLE
    00401094   |.  E8 6D000000       CALL <JMP.&kernel32.GetStdHandle>                         ; \GetStdHandle
    00401099   |.  8945 FC           MOV [LOCAL.1],EAX                                         ;  kernel32.BaseThreadInitThunk
    0040109C   |.  FF75 08           PUSH [ARG.1]
    0040109F   |.  E8 2C000000       CALL console.004010D0
    004010A4   |.  8945 F4           MOV [LOCAL.3],EAX                                         ;  kernel32.BaseThreadInitThunk
    004010A7   |.  6A 00             PUSH 0                                                    ; /pOverlapped = NULL
    004010A9   |.  8D45 F8           LEA EAX,[LOCAL.2]                                         ; |
    004010AC   |.  50                PUSH EAX                                                  ; |pBytesWritten = kernel32.BaseThreadInitThunk
    004010AD   |.  FF75 F4           PUSH [LOCAL.3]                                            ; |nBytesToWrite = 0
    004010B0   |.  FF75 08           PUSH [ARG.1]                                              ; |Buffer = 7FFDB000
    004010B3   |.  FF75 FC           PUSH [LOCAL.1]                                            ; |hFile = 7FFDB000
    004010B6   |.  E8 5D000000       CALL <JMP.&kernel32.WriteFile>                            ; \WriteFile
    004010BB   |.  8B45 F8           MOV EAX,[LOCAL.2]                                         ;  kernel32.777F1114
    004010BE   |.  C9                LEAVE
    004010BF   \.  C2 0400           RETN 4
    

    Bei IDA Pro wird die Funktion: ReadFile aufgerufen und bei Olly steht dort WriteFile.

    Eigentlich müsste ja an der Stelle WriteFile richtig sein da ja Text ausgeben werden soll.

    Bei IDA Pro steht am Ende RETN 8 und bei Olly RETN 4.

    Kann mir wer erklären warum ich zwei so verschiedene Ausgaben erhalte?



  • Sry mein Fehler ...

    Meinen Fehler erkennt man an den Offset Adressen. Ich hab in IDA ausversehen bei der falschen Funktion geguckt. 😃 xD



  • MASM hat keine StdOut Funktion!
    Den Quelltext dieser Funktion findest du im MASM32 SDK.


Anmelden zum Antworten