Какие аргументы делают это сравнение правдой? - PullRequest
0 голосов
/ 02 мая 2018

Видимо, здесь есть уязвимость? Может быть, нет, или это просто?

 arg_4           = dword ptr  0Ch

 push    ebp
 mov     ebp, esp
 mov     eax, [ebp+arg_4]
 mov     ecx, [eax+0Ch]
 movsx   edx, byte ptr [ecx+2]
 cmp     edx, 4Dh

Предполагая, что я контролирую аргументы этой функции, какие значения делают это сравнение верным? Что меня поражает, так это:

mov eax [ebp+arg_4]
mov ecx, [eax+0Ch]

Если я контролирую arg_4 (что я считаю аргументом?), Тогда я могу сделать eax любым, что захочу. Но .... eax используется в качестве адреса в следующей строке! Как, черт возьми, я мог ожидать адрес (и, таким образом, контролировать, что входит в ecx)? Адреса будут отличаться при каждом запуске этого ...

Я что-то неправильно понимаю?

1 Ответ

0 голосов
/ 02 мая 2018

В С:

char *a[] = { 0, 0, 0, "xxM" };
f(0, a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...