Как я могу получить адрес памяти глобальной переменной, используя форматную атаку строки в C? - PullRequest
1 голос
/ 29 апреля 2020

Код здесь:

#include <stdio.h>

#define NUM 0x11a

int data = NUM;

int main(int argc, char * argv[])
{
    struct{
        unsigned long memoryAddress;
       char array[50];
    } locals;

    locals.memoryAddress= 2;

    scanf("%lx", &locals.memoryAddress);

    scanf("%49s", locals.array);
    printf(locals.array);

    data += 5;
    printf("\n%d\n", data);

    if(data != NUM + 0x5){
        printf("Print me!\n");
    }

    return 0;
}

Я должен получить "Print me!". Это атака форматной строки, и я использую %n и gdb.

Так как я могу получить адрес памяти данных, чтобы перезаписать его?

...