Как написать на адрес, если адрес присутствует с другими шестнадцатеричными цифрами в слове

Я написал этот код, чтобы посмотреть, смогу ли я изменить переменную 'target' с помощью атаки форматной строки в x64.

#include<stdio.h>
int target;
int main(int argc , char **argv)
{   
    printf(argv[1]);
    printf("\n\nTarget variable is at: %p" , &target);
    if(target)
        printf("Target Modified!");
    return 0;
}   

Поскольку каждое слово в x64 имеет размер 8 байтов, адрес целевой переменной должен быть записан в виде 8 байтов.

Но здесь проблема в том, что адрес целевой переменной

0x555555755034 (формы 0xAABBCCDDEEFF)

но так как размер слова составляет 8 байт, я должен написать этот адрес что-то вроде

0x0000555555755034 (в форме 0x0000AABBCCDDEEFF).

но когда я запускаю следующую команду, я вижу, что она всегда присутствует с некоторыми другими шестнадцатеричными цифрами, такими как 5ecdAABBCCDDEEFF.

./code $(python -c 'print "\x34\x50\x75\x55\x55\x55"+"-%p"*131')

Чтобы сформировать правильный адрес, я попытался добавить два "\00" перед целевым адресом, например

./code $(python -c 'print "\x34\x50\x75\x55\x55\x55\x00\x00"+"-%p"*131')

но терминал жаловался, что "\x00" будет игнорироваться, поскольку он завершает строку.

Итак, мой вопрос: как мне написать адрес, который выглядит как 0xAABBCCDDEEFF, но присутствует в слове с другими шестнадцатеричными цифрами, такими как 0xed4cAABBCCDDEEFF.

Я буду рад, если кто-то может помочь. Пожалуйста, прокомментируйте, если я вам не понятен!

0 ответов

Другие вопросы по тегам