VC2008のアセンブラ出力
Visual C++ 2008 Express Editionで勉強をしています。
Cで簡単なプログラムを作り、そのアセンブラ出力を見ているのですが、下のアセンブラリストの###部のようなCの記述と関係ないコードが追加されます。この行を削除してアセンブルしても動作に問題ないように見えます。
このコードが追加される意味を教えて下さい。名前からセキュリティに関係しそうですが……
またプログラムによって追加される場合と、されない場合があります。何故でしょう?
ご教示いただければ幸いです。
----scanf.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
char buf[256];
scanf("%s",buf);
i = atoi(buf);
printf("%d\n",i);
return 0;
}
-----
-----scanf.asm
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
TITLE D:\vc_asm\scanf.c
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
_DATA SEGMENT
$SG3702 DB '%s', 00H
ORG $+1
$SG3703 DB '%d', 0aH, 00H
_DATA ENDS
PUBLIC __$ArrayPad$
PUBLIC _main
EXTRN _printf:PROC
EXTRN _atoi:PROC
EXTRN _scanf:PROC
EXTRN ___security_cookie:DWORD
EXTRN @__security_check_cookie@4:PROC
; Function compile flags: /Odtp
_TEXT SEGMENT
_buf$ = -264 ; size = 256
__$ArrayPad$ = -8 ; size = 4
_i$ = -4 ; size = 4
_main PROC
; Line 5
push ebp
mov ebp, esp
sub esp, 264; 00000108H
mov eax, DWORD PTR ___security_cookie ###この行
xor eax, ebp ###この行
mov DWORD PTR __$ArrayPad$[ebp], eax ###この行
; Line 8
lea eax, DWORD PTR _buf$[ebp]
(中略 Cで記述した内容の動作が記載)
; Line 11
xor eax, eax
; Line 12
mov ecx, DWORD PTR __$ArrayPad$[ebp] ###この行
xor ecx, ebp ###この行
call @__security_check_cookie@4 ###この行
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
-----
お礼
ありがとうございました。理解しました