Thread View: pl.comp.lang.asm
4 messages
4 total messages
Started by Remek
Mon, 14 Aug 2006 14:05
Funkcje systemowe Win32
Author: Remek
Date: Mon, 14 Aug 2006 14:05
Date: Mon, 14 Aug 2006 14:05
17 lines
1177 bytes
1177 bytes
Witam!
Czy poniższy zestaw funkcji wykona się jednym "ciągiem"?
Tzn. gdzie wraca program po wykonaniu takiej instukcji?
W debuggerze widzę, że nie wraca w miejsce skąd funkcja została
wywołana.
.....
invoke SetWindowTextA, hEdit4, addr Bufor1
invoke SetWindowTextA, hEdit5, addr Bufor2
invoke SetWindowTextA, hEdit6, addr Bufor3
......
--
Remek
Re: Funkcje systemowe Win32
Author: Bogdan (bogdro)
Date: Mon, 14 Aug 2006 15:34
Date: Mon, 14 Aug 2006 15:34
49 lines
2446 bytes
2446 bytes
Remek napisał(a): > Witam! > > Czy poniższy zestaw funkcji wykona się jednym "ciągiem"? > Tzn. gdzie wraca program po wykonaniu takiej instukcji? > W debuggerze widzę, że nie wraca w miejsce skąd funkcja została > wywołana. > > ..... > > invoke SetWindowTextA, hEdit4, addr Bufor1 > invoke SetWindowTextA, hEdit5, addr Bufor2 > invoke SetWindowTextA, hEdit6, addr Bufor3 > > ...... Oczywiście, że nie wraca do wywołującej instrukcji, tylko zaraz za nią. Powyższy ciąg instrukcji z punktu widzenia programu wykona się jednym ciągiem (pomijamy przerwania sprzętowe). Używając debugera może zostałeś zaskoczony przez jakieś PUSHe. Jak wiemy, nie ma instrukcji procesora 'invoke'. To, co jest powyżej, zostaje przez kompilator rozłożone na z grubsza coś takiego: push dword offset Bufor1 push dword [hEdit4] call [SetWindowTextA] push dword offset Bufor2 push dword [hEdit5] call [SetWindowTextA] push dword offset Bufor3 push dword [hEdit6] call [SetWindowTextA] a jeśli te zmienne są lokalne, to jeszcze lepiej - każdy PUSH wyglądać będzie jak np.: lea eax, [ebp-xx] push eax ; push offset push dword [ebp-yy] ; push [] lub z użyciem ESP zamiast EBP (raczej wątpliwe). -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Funkcje systemowe Win32
Author: Remek
Date: Mon, 14 Aug 2006 16:42
Date: Mon, 14 Aug 2006 16:42
40 lines
1887 bytes
1887 bytes
> Oczywiście, że nie wraca do wywołującej instrukcji, tylko zaraz za nią Oczywiście o to mi chodziło. Źle sformułowałem myśl. Chodzi o powrót do kolejnej po call instrukcji. > nie ma instrukcji procesora 'invoke' To przecież wiadomo :) Nie chciało mi się przepisywać binarki i podałem ze źródła, ale przyjmijmy, że obaj wiemy o co chodzi. Śledziłem program w Gobug, który ma kłopoty ze śledzeniem funkcji systemowych. Obejrzę jeszcze w SoftIce, ale efekt działania programu jest taki, że wartość z bufora zachowuje się w pierwszej kontrolce, a dwie następne są zerowane jeśli dalej są instrukcje czyszczące bufory: xor eax, eax mov ecx, 32/4 lea edi, Bufor1 cld rep stosd mov ecx, 512/4 lea edi, Bufor2 cld rep stosd mov ecx, 64/4 lea edi, Bufor3 cld rep stosd Chyba na przykładzie trzech linijek nie da sie wiele powiedzieć. Znajdę ten program, w którym ten efekt wystąpił i napiszę coś więcej. -- Remek
Re: Funkcje systemowe Win32
Author: Remek
Date: Wed, 16 Aug 2006 02:31
Date: Wed, 16 Aug 2006 02:31
9 lines
1022 bytes
1022 bytes
Gdyby ktoś miał ochotę rzucić okiem na źródełko, w którym wystepuje opisany problem to jest tu: http://republika.pl/remek62/Programy/Dziel.asm Pozdrawiam -- Remek
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads