gpt4 book ai didi

c++ - 地址减法值总是12?变量的大小是否很小?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:18 25 4
gpt4 key购买 nike

我目前正在研究 C、C++ 和 ASM。我可以看到 ebp 减法值之间始终存在 12 的差异。我的反汇编代码:

代码:

int main()
{
int abc = 10;
int def = 20;
short int a = 1;
long int b = 1000;

//PlayFloat();

GetValue();
return 0;
}

已禁用:

 push        ebp  
mov ebp,esp
sub esp,0F0h
push ebx
push esi
push edi
lea edi,[ebp+FFFFFF10h]
mov ecx,3Ch
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
;int abc = 10;
mov dword ptr [ebp-8],0Ah
;int def = 20;
mov dword ptr [ebp-14h],14h
;short int a = 1;
mov eax,1
mov word ptr [ebp-20h],ax
;long int b = 1000;
mov dword ptr [ebp-2Ch],3E8h

;//PlayFloat();

;GetValue();
call 004110EB
;return 0;
xor eax,eax

但是为什么? Int 占 4 个字节,而 short 只占 2 个字节。那么为什么会有12的差异呢?请帮忙。

编辑:在已发布的列出的 asm 代码中似乎是相同的。我已经在设置里设置过了。

_TEXT   SEGMENT
_b$ = -44 ; size = 4
_a$ = -32 ; size = 2
_def$ = -20 ; size = 4
_abc$ = -8 ; size = 4
_main PROC ; COMDAT

; 18 : {

push ebp
mov ebp, esp
sub esp, 240 ; 000000f0H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-240]
mov ecx, 60 ; 0000003cH
mov eax, -858993460 ; ccccccccH
rep stosd

; 19 : int abc = 10;

mov DWORD PTR _abc$[ebp], 10 ; 0000000aH

; 20 : int def = 20;

mov DWORD PTR _def$[ebp], 20 ; 00000014H

; 21 : short int a = 1;

mov eax, 1
mov WORD PTR _a$[ebp], ax

; 22 : long int b = 1000;

mov DWORD PTR _b$[ebp], 1000 ; 000003e8H

; 23 :
; 24 : //PlayFloat();
; 25 :
; 26 : GetValue();

call _GetValue

; 27 : return 0;

xor eax, eax

; 28 : }

pop edi
pop esi
pop ebx
add esp, 240 ; 000000f0H
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS

如您所见,也有 12 的差异。

最佳答案

这是调试代码。变量之间的空间用 0CCCCCCCCh 填充以检测例如。缓冲区溢出。

我相信您不会在发布版本中看到这一点。但是您必须实际使用这些变量,因此它们不会在发布构建中被优化掉。

关于c++ - 地址减法值总是12?变量的大小是否很小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11228404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com