
27.06.2007, 15:15
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Для Microsoft Visual Studio 7 (она же 2003 .NET):
Если нет желания таскать за собой рантайм в том или ином виде, а при его отключении линкер орёт на неразрешенные ссылки на __chkstk, ___securitycookie и @__security_check_cookie@4, можно обойтись следующей реализацией этого (писал сам  )
Код:
// будем тока выделять место в стеке под переменные
extern "C" __declspec(naked) void _chkstk()
{
__asm
{
// Enter: EAX = size
xor ebx, ebx
xchg [esp], ebx // запоминаем адрес возврата
add esp, 4 // удаляем его
sub esp, eax // выделяем место
push ebx // кладем адрес возврата на место и возвращаемся
retn
}
}
// любое число, в принципе, но чтобы оно было "случайное", а не вида 00010000.
// хороший вариант - 19237845 или BACBBAFD или что-нибудь в этом роде
extern "C" DWORD_PTR __security_cookie = 0x5F8E34B0;
// проверка на переполнение буфера
extern "C" void _fastcall __security_check_cookie(DWORD_PTR cookie)
{
if(__security_cookie != cookie) // можно добавить ченить более умное при ошибке
__asm int 3;
}
Последний раз редактировалось _Great_; 27.06.2007 в 15:18..
|
|
|