Ich arbeite an einem MASM-Projekt und ich denke, ich habe alles runter/bereit zu gehen, erwarte, dass ich ein Zeiger Problem habe, glaube ich, und ich sehe es einfach nicht. Wenn ich es debugge, führt es zu einem Pufferüberlauf.MASM Pointers Implementierung
EDIT:
Einige weitere Informationen. Der Fehler scheint auf der ganzen Linie zu sein: Ich glaube, es hat etwas mit einer meiner Vergleichsanweisungen/Werten zu tun, die ich passiere, so dass es nicht bei der Rückkehr ankommt, wenn b/a und dann das Testen von a gleich 0 ist.
mov eax, DWORD PTR[EBP + nBOffset]
Code:
.model flat
.686
.STACK 4096
pDepthOffset EQU 8
nAOffset EQU 12
nBOffset EQU 16
.data
nTempSwap dd ?
.code
[email protected] PROC PUBLIC
push ebp
mov ebp, esp
push ebx
;ndepth += 1 section.
mov eax, DWORD PTR[EBP + pDepthOffset]
add eax, 1
mov DWORD PTR[EBP + pDepthOffset], EAX
mov eax, DWORD PTR[EBP + nAOffset]
;if b < a
cmp eax, DWORD PTR[EBP + nBOffset]
jae returnsection
;SWAP section
mov ecx, DWORD PTR[EBP + nAOffset] ; saving off A value.
mov eax, DWORD PTR[EBP + nBOffset] ; saving off B value
mov DWORD PTR[EBP + nAOffset], eax ; storinng my B into A
mov DWORD PTR[EBP + nBOffset], ecx ; storinng my A into B
;checking if equal to 0
returnsection:
cmp DWORD PTR[EBP + nAOffset], 0
jne callingSection
mov eax, DWORD PTR[EBP + nBOffset]
jmp finish
callingSection:
mov eax, DWORD PTR[EBP + nAOffset]
push eax
mov ecx, DWORD PTR[EBP + nBOffset]
sub ecx, DWORD PTR[EBP + nAOffset]
push ecx
mov edx, DWORD PTR[EBP + pDepthOffset]
push edx
call [email protected]
finish:
pop ebx
pop ebp
ret 12
[email protected] ENDP
END
'hinzufügen esp, 12' <- warum Sie tun Haben Sie das, nachdem Sie eine "stdcall" -Funktion aufgerufen haben? – Michael
Danke! War Rest von, als ich eine Cdecl-Druckfunktion darin hatte, einige vorherige Fehler zu debuggen; aber ich habe immer noch Probleme. –
Bitte geben Sie weitere Informationen an. Wo ist der Pufferüberlauf? (Haben Sie versucht, den Code in einem Debugger zu durchlaufen, um den Überlauf zu erfassen?) –