Показать сообщение отдельно

  #11  
Старый 27.09.2009, 23:46
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
С нами: 10139366

Репутация: 1502


По умолчанию

Buffer Security что-то там (/GS) включён

компилирую вот такой код в Release (вывод добавлен, чтобы оптимизация не убила массив вообще):
Код:
#include "stdio.h"
int main(){
    int a[100];
	for (int j = 0; j < 1000; j++){
		a[j] = j;
	}
	printf("%d",a[99]);
}
получаю код:
Код:
00401000   SUB ESP,190
00401006   XOR EAX,EAX
00401008   JMP SHORT aaaqqww.00401010
0040100A   LEA EBX,DWORD PTR DS:[EBX]
00401010   /MOV DWORD PTR SS:[ESP+EAX*4],EAX
00401013   |INC EAX
00401014   |CMP EAX,3E8
00401019   \JL SHORT aaaqqww.00401010
0040101B   MOV EAX,DWORD PTR SS:[ESP+18C]
00401022   PUSH EAX                                 ; /<%d> = 0
00401023   PUSH aaaqqww.004020F4                    ; |format = "%d"
00401028   CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf
0040102E   XOR EAX,EAX
00401030   ADD ESP,198
00401036   RETN
Наслаждайся
Кстати конкретно данный код приводит к выполнению шеллкода совсем смешным образом - вначале он переписывет SEH запись, а затем уже пытается записать что-то выше верхней границы стека и вызывает exception, обрабатываемый перезаписанным обработчиком. Но можно и просто переписать, если тысячу уменьшить
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием