masm x86 Assembly 是否可以检查地址是否已分配?
masm x86 Assembly Is it possible to check if an address is allocated or not?
在masm中,可以使用.DATA静态分配内存,而.DATA?指令,这很好,但是如果我需要动态分配一块内存怎么办?假设我想在动态分配的内存中创建一个值为 10 的 DWORD。一种理论是,我可以 运行 通过一系列地址,检查它们是否已分配,如果没有,则分配地址并用它来存储 DWORD。但只有一个问题;我不知道如何检查是否分配了地址。 :(
Make_Dword PROC
PUSH EBP
MOV EBP, ESP
PUSH ESI
PUSH EDI
PUSH EBX
MOV EBX, [EBP - 08h] ;EBP - 08h is the dword value
;Iterate through memory addresses and check if one is unallocated, if so
; use it to store the dword value in, finally return the newly allocated
; address of the dword in memory.
MOV EAX, [the newly allocated address of the dword]
POP EBX
POP EDI
POP ESI
MOV ESP, EBP
POP EBP
Make_Dword ENDP
PUSH DWORD PTR 0Ah
CALL Make_Dword
我正在编辑我的回复,看看是否可以澄清。如果你有一个数据指令,你能用它分配一个静态大小的内存块吗?例如
.数据
poolOfDwords DWORD 1000
然后,只需将它们初始化为您知道无法获得的值(也许是-1?)。然后,当您需要 "allocate" 一个 DWORD 时,您可以遍历列表中第一个为 -1(未分配)的条目并使用它。如果您需要使用它,您可以 return 该位置的偏移量。
希望这有助于澄清我的想法。
在masm中,可以使用.DATA静态分配内存,而.DATA?指令,这很好,但是如果我需要动态分配一块内存怎么办?假设我想在动态分配的内存中创建一个值为 10 的 DWORD。一种理论是,我可以 运行 通过一系列地址,检查它们是否已分配,如果没有,则分配地址并用它来存储 DWORD。但只有一个问题;我不知道如何检查是否分配了地址。 :(
Make_Dword PROC
PUSH EBP
MOV EBP, ESP
PUSH ESI
PUSH EDI
PUSH EBX
MOV EBX, [EBP - 08h] ;EBP - 08h is the dword value
;Iterate through memory addresses and check if one is unallocated, if so
; use it to store the dword value in, finally return the newly allocated
; address of the dword in memory.
MOV EAX, [the newly allocated address of the dword]
POP EBX
POP EDI
POP ESI
MOV ESP, EBP
POP EBP
Make_Dword ENDP
PUSH DWORD PTR 0Ah
CALL Make_Dword
我正在编辑我的回复,看看是否可以澄清。如果你有一个数据指令,你能用它分配一个静态大小的内存块吗?例如
.数据 poolOfDwords DWORD 1000
然后,只需将它们初始化为您知道无法获得的值(也许是-1?)。然后,当您需要 "allocate" 一个 DWORD 时,您可以遍历列表中第一个为 -1(未分配)的条目并使用它。如果您需要使用它,您可以 return 该位置的偏移量。
希望这有助于澄清我的想法。