回答編集履歴
1
VC++ x86 のコンパイル結果を追加
answer
CHANGED
@@ -58,4 +58,61 @@
|
|
58
58
|
また、
|
59
59
|
testB[0] は testB[0][0] のアドレスに変換されますが、
|
60
60
|
testB[1] は testB[1][0] のアドレスに、そして、
|
61
|
-
testB[2] は testB[2][0] のアドレスに変換されます。
|
61
|
+
testB[2] は testB[2][0] のアドレスに変換されます。
|
62
|
+
|
63
|
+
**追記**
|
64
|
+
Visual C++ の 32ビット版で -FAオプションでコンパイルすると、
|
65
|
+
```
|
66
|
+
_DATA SEGMENT
|
67
|
+
COMM _testA:DWORD:05H
|
68
|
+
COMM _testB:DWORD:06H
|
69
|
+
_DATA ENDS
|
70
|
+
PUBLIC _main
|
71
|
+
EXTRN _f:PROC
|
72
|
+
EXTRN _g:PROC
|
73
|
+
EXTRN @__security_check_cookie@4:PROC
|
74
|
+
EXTRN ___security_cookie:DWORD
|
75
|
+
; Function compile flags: /Odtp
|
76
|
+
_TEXT SEGMENT
|
77
|
+
_b$ = -48 ; size = 24
|
78
|
+
_a$ = -24 ; size = 20
|
79
|
+
__$ArrayPad$ = -4 ; size = 4
|
80
|
+
_main PROC
|
81
|
+
; File c:\tmp\c\a.c
|
82
|
+
; Line 10
|
83
|
+
push ebp
|
84
|
+
mov ebp, esp
|
85
|
+
sub esp, 48 ; 00000030H
|
86
|
+
mov eax, DWORD PTR ___security_cookie
|
87
|
+
xor eax, ebp
|
88
|
+
mov DWORD PTR __$ArrayPad$[ebp], eax
|
89
|
+
; Line 13
|
90
|
+
push OFFSET _testA
|
91
|
+
call _f
|
92
|
+
add esp, 4
|
93
|
+
; Line 14
|
94
|
+
push OFFSET _testB
|
95
|
+
call _g
|
96
|
+
add esp, 4
|
97
|
+
; Line 15
|
98
|
+
lea eax, DWORD PTR _a$[ebp]
|
99
|
+
push eax
|
100
|
+
call _f
|
101
|
+
add esp, 4
|
102
|
+
; Line 16
|
103
|
+
lea ecx, DWORD PTR _b$[ebp]
|
104
|
+
push ecx
|
105
|
+
call _g
|
106
|
+
add esp, 4
|
107
|
+
; Line 17
|
108
|
+
xor eax, eax
|
109
|
+
mov ecx, DWORD PTR __$ArrayPad$[ebp]
|
110
|
+
xor ecx, ebp
|
111
|
+
call @__security_check_cookie@4
|
112
|
+
mov esp, ebp
|
113
|
+
pop ebp
|
114
|
+
ret 0
|
115
|
+
_main ENDP
|
116
|
+
_TEXT ENDS
|
117
|
+
END
|
118
|
+
```
|