我正在开发一个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打印功能时就剩下了;但我仍然有问题。 –
请提供更多信息。缓冲区溢出在哪里? (你是否试过在调试器中单步执行代码以捕获行为中的溢出?) –