Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change
Quote from: sinsi on September 14, 2024, 05:49:29 PMActually, yes. On entryYou are right, as usual
Code Select ExpandRSP+0 return address
RSP+8 space for 1st arg
RSP+16 space for 2nd arg
RSP+24 space for 3rd arg
RSP+32 space for 4th arg
RSP+40 actual 5th arg - first stack arg
Quote from: jack on August 31, 2024, 07:17:02 AMhello i Z !
I would be interested in testing you HyperLib but there several reasons that prevent that
1: prohibitive licence
2: closed source
3: binary distribution only, and worst, it comes as an installer
Quoteshow me an x64 assembler skeleton program for Windows using the Windows APIand I was amazed at what it came with.
QuoteThe Shadow space (also sometimes called Spill space or Home space) is 32 bytes above the return addressIt's the 32 bytes, not 32 bytes above.
Quote from: jj2007 on September 14, 2024, 04:35:34 PMActually, yes. On entryQuote from: NoCforMe on September 14, 2024, 10:11:49 AMbelow stack argsReally?
RSP+0 return address
RSP+8 space for 1st arg
RSP+16 space for 2nd arg
RSP+24 space for 3rd arg
RSP+32 space for 4th arg
RSP+40 actual 5th arg - first stack arg
Quote from: NoCforMe on September 14, 2024, 10:11:49 AMbelow stack argsReally?
Quote from: wanker742126 on September 14, 2024, 10:31:34 AMMy MYFIX_ENG.INC can only be used in
MOV reg1,VAR[reg2*n]
.x64
.model flat
include MYFIX_ENG.INC
.data
db 50h dup (?)
array dd 0,1,2,3,4,5,6,7
.code
start:
xor ecx, ecx
mova eax, array[rcx*4]
mov eax, array[rcx*4]
ret
end start
Offset Type Applied To Index Name
-------- ---------------- ----------------- -------- ------
00000005 ADDR32 00000050 4 .data
0000000C ADDR32 00000000 9 array
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
MOV64b.obj : error LNK2017: 'ADDR32' relocation to '.data' invalid without /LARGEADDRESSAWARE:NO
MOV64b.obj : error LNK2017: 'ADDR32' relocation to 'array' invalid without /LARGEADDRESSAWARE:NO
LINK90 : fatal error LNK1165: link failed because of fixup errors
[/code]QuoteThe Shadow space (also sometimes called Spill space or Home space) is 32 bytes above the return address which the called function owns (and can use as scratch space), below stack args if any. The caller has to reserve space for their callee's shadow space before running a call instruction.
It is meant to be used to make debugging x64 easier.
Recall that the first 4 parameters are passed in registers. If you break into the debugger and inspect the call stack for a thread, you won't be able to see any parameters passed to functions. The values stored in registers are transient and cannot be reconstructed when moving up the call stack.
This is where the Home space comes into play: It can be used by compilers to leave a copy of the register values on the stack for later inspection in the debugger. This usually happens for unoptimized builds. When optimizations are enabled, however, compilers generally treat the Home space as available for scratch use. No copies are left on the stack, and debugging a crash dump turns into a nightmare.