我正在開發一個MASM項目,我想我已經把所有東西都放下了/準備好了,期待我有一個指針問題,我相信我只是沒有看到它。當我調試它時,會導致緩衝區溢出。MASM指針實現
編輯:
一些更多的信息。這個錯誤似乎是在這條線上:我相信它與我的一個比較語句/值有關,因此它在b/a然後對它進行測試a時等於0時不會捕獲返回值。
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
'ADD ESP,12' < - 爲什麼你在調用看起來是一個'stdcall'函數之後有這個嗎? – Michael
謝謝!當我在那裏嘗試調試一些以前的錯誤時,有一個cdecl打印功能時就剩下了;但我仍然有問題。 –
請提供更多信息。緩衝區溢出在哪裏? (你是否試過在調試器中單步執行代碼以捕獲行爲中的溢出?) –