🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
4 messages
4 total messages Started by Remek Mon, 14 Aug 2006 14:05
Funkcje systemowe Win32
#510
Author: Remek
Date: Mon, 14 Aug 2006 14:05
17 lines
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
#511
Author: Bogdan (bogdro)
Date: Mon, 14 Aug 2006 15:34
49 lines
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
#512
Author: Remek
Date: Mon, 14 Aug 2006 16:42
40 lines
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
#513
Author: Remek
Date: Wed, 16 Aug 2006 02:31
9 lines
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