0
我試圖寫分配的存儲器,存儲在給定的指針的地址的組件的功能。但是,我不知道如何將地址存儲在傳遞給函數的參數中。FASM通過引用傳遞/指針
我有以下幾點:
struc SSLSocket sock, ssl, ctx, address, port, connected, type
{
.sock dd sock
.ssl dd ssl
.ctx dd ctx
.address dd address
.port dw port
.connected db connected
.type dd type
}
SockArray dd 0 //will allocate 5 of the above struct on the heap and store it in this pointer.
section '.code' code readable executable
main:
push ebp
mov ebp,esp
;push 5
;call [malloc]
;add esp, 0x04
;mov [SockArray], eax
push SockArray ;pointer that will hold allocated memory
push 23 ;size of struct
call ReAllocate_Memory
add esp, 0x08
push [SockArray] //print address of allocated memory.
push PrintPtr
call [printf]
add esp, 0x08
mov esp, ebp
pop ebx
call [getchar]
mov eax, 0x00
ret
ReAllocate_Memory:
push ebp
mov ebp, esp
mov eax, [ebp + 0x0C] ;Pointer that will hold address of allocation
mov edx, [ebp + 0x08] ;Size to allocate in bytes
push eax
call [free] ;Free any allocated memory
add esp, 0x04
push edx
call [malloc] ;Allocate n-size bytes
add esp, 0x04
;mov address into parameter pointer ([ebp + 0x0C]).
mov esp, ebp
pop ebp
ret
任何想法?
,我也不太清楚,我明白了這一切,因爲我是相當新在彙編依然。我做了:http://pastebin.com/fYUXBkeW,它似乎工作。我不得不保存'edx'和其他寄存器,否則會崩潰。你對此是正確的。我理解你的意思,但不是全部。特別是'更簡單的方法'。我接受這個答案是因爲我明白了它的大部分,並且保存寄存器部分保存了我:D – Brandon
讓我看看我能否更好地解釋它:在'ReAllocate_Memory'中爲新緩衝區調用'malloc'。 'malloc'的結果在'eax'中返回。如果你把它留在那裏並且不做任何事情就返回給調用者,當'ReAllocate_Memory'返回時,這個值仍然會在調用範圍中,並且你可以像原來一樣將它存儲起來(雖然註釋掉了) '再打電話。 –
OHHH我明白了!我沒有想到這一點。我的思想堅持讓它使用參數來思考返回值。 Ahaha。這是一個更好的解釋。謝謝! :d – Brandon