PDA

Просмотр полной версии : GlobalMemoryStatus и ОЗУ 4 гб


fire64
02.10.2009, 17:39
при запуске программы на компьютере с 4 гигами памяти появлялось ошибка

"Available memory less than 15mb!!! -1310720"

декомпиляцуия позволила узнать причину

GlobalMemoryStatus возвращает отрицательное количество памяти


struct _MEMORYSTATUS Buffer; // [sp+18h] [bp-20h]@1

Buffer.dwLength = 32;
GlobalMemoryStatus(&Buffer);
v0 = Buffer.dwTotalPhys;
dword_2042D298 = Buffer.dwTotalPhys;
if ( (signed int)Buffer.dwTotalPhys < 15728640 )
{
sub_20101560((int)"Available memory less than 15MB!!! %i\n", SLOBYTE(Buffer.dwTotalPhys));
v0 = Buffer.dwTotalPhys;
}

[QwyZ]
02.10.2009, 18:20
i?

fire64
02.10.2009, 18:26
вопрос как сделать так что бы не было ошибки ?

Ra$cal
02.10.2009, 18:35
вариант номер раз - пропатчить переход, чтобы управление никогда не попадало в этот блок
вариант два - изменить код проверки, сделав сравниваемые числа беззнаковыми.
еще можно вообще убить вызов GlobalMemoryStatus. Вообще все ограничивается только фантазией. Или не понятно как это сделать технически? Hiew и прочие hex редакторы с поддержкой дизассемблирования.

M_script_
02.10.2009, 19:03
вариант номер три - запостить тему вместе с линком на программу в разделе "Реверсинг"

fire64
02.10.2009, 21:44
всем спасибо уже сам разобрался

заменил JGE на JMP и тем самым обошел проверку