Как обратить вспять эффекты MOVL - PullRequest
0 голосов
/ 16 мая 2018

Итак, когда вызывается movl (в машинном коде intel x84-64), и в качестве места назначения используется регистр, он устанавливает байты старшего порядка в регистре на 0. Так как я могу использовать инструкцию movl, чтобы сохранитьоригинальное значение регистра?В этой ситуации мы не можем использовать rsi / rdi для команд movl (только esi и edi).Например, если я иду

movq %rsp, %rax

и затем вызываю

movl %eax, %edx

, есть ли способ вызвать movl / do что-то после movl, так что rdx может содержать исходное значение, которое былов% rsp?

Причина, по которой я не могу сделать что-то вроде movq% rax,% rdx, заключается в том, что у меня нет этих команд для меня.Я делаю ROP-атаку, где у меня есть только инструкции movl в ферме гаджетов.У меня также есть доступ к инструкциям andb, orb, cmpb и testb.

1 Ответ

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

Вы не можете склеить несколько гаджетов, не так ли?Вам нужно найти одну последовательность, которая получает желаемое значение в регистр и переходит в этот регистр.

Все, что усекает старшие 32 бита вашего указателя, бесполезно; биты исчезли, и вы не можете их вернуть, кроме как путем повторного копирования с оригинала .(Или, если вы можете найти какую-то последовательность поворотов и / или shld something / ror rax,32).

Запись 32-битного регистра не просто «скрывает» старшие биты, она выдаетих прочь.Это необратимо .Вы должны хранить копию любых данных, которые вы хотите, в памяти или в архитектурном регистре.

...