Projects > Poasm

Stack allocation function derived from chkstk

(1/1)

Vortex:
_chkstk.asm extracted from \PellesC\lib\crt.lib :


--- Code: ---.386
.model flat
option casemap:none

PAGE_SIZE equ 4096

.code

__chkstk PROC

    push    ecx
    cmp     eax,PAGE_SIZE
    lea     ecx,[esp+8H]
    jb      last_page

probe_stack:

    sub     ecx,PAGE_SIZE
    sub     eax,PAGE_SIZE
    test    DWORD PTR [ecx],eax
    cmp     eax,PAGE_SIZE
    jae     probe_stack
   
last_page:

    sub     ecx,eax
    mov     eax,esp
    test    DWORD PTR [ecx],eax
    mov     esp,ecx
    mov     ecx,DWORD PTR [eax]
    mov     eax,DWORD PTR [eax+4]
    push    eax
    ret   

__chkstk ENDP

END
--- End code ---

With some slight modifications, the function above is converted to allocmem allowing stack reservations exceeding 4096 bytes :


--- Code: ---include     Demo.inc

.data

string  db '%s',13,10
        db 'Address of the string = %Xh',0

.code

start:

    call    main
    invoke  ExitProcess,0

main PROC

LOCAL pMem:DWORD

     invoke allocmem,8200

     mov    pMem,esp

     mov    DWORD PTR [esp],'sihT'
     mov    DWORD PTR [esp+4],' si '
     mov    DWORD PTR [esp+8],'et a'
     mov    DWORD PTR [esp+12],'.ts'

     invoke printf,ADDR string,pMem,esp

     ret

main ENDP


END start
--- End code ---

Vortex:
Here is the 64-bit version of the chkstk function extracted from \PellesC\Lib\crt64.lib

Navigation

[0] Message Index

Go to full version