Намеренное переполнение буфера и переход в другую функцию за счёт этого переполнения

#include <stdio.h>
#include <string.h>

void input(char *a)
{
    char overflow[4]; // Будем переполнять здесь
    gets(overflow); // Небезопасное чтение: не котролирует размер вводимых данных
}

void other() // Переход после переполнения в эту функцию
{
    fprintf(stderr, "other\n");
}

int main(int argc, char *argv[])
{    
    fprintf(stdout,"Введите Вашу строку:\n");
    input(argv[1]); // Передаём аргумент в функцию небезопасного чтения
    fprintf(stdout, "main\n");

    return 0;
}

Есть вот такой код. Необходимо подобрать готовый ввод чтобы после переполнения буфера попасть в функцию other(как раз за счёт переполнения) чтобы она написала строку а потом программа завершилась любым способом. Это необходимо провести с включенным ASLR. Смещение между адресами функций при каждом запуске остается постоянным, но сами адреса изменяются. Скорее всего 4 символа буфера можно заполнить любыми значениями, но как подобрать продолжение, которое как раз приведёт к переходу в other? Взял в таблице ASCII символ равный смещению буфер заполнил 4 буквами A а регистр(где-то видел, что так нужно) 8 буквами A под смещение подходила символ G, но почему-то функция other не отработала. Подскажите, что подправить?

0000000000001189 <input>:
    1189:  f3 0f 1e fa            endbr64
    118d:  55                     push   %rbp
    118e:  48 89 e5               mov    %rsp,%rbp
    1191:  48 83 ec 20            sub    $0x20,%rsp
    1195:  48 89 7d e8            mov    %rdi,-0x18(%rbp)
    1199:  64 48 8b 04 25 28 00   mov    %fs:0x28,%rax
    11a0:  00 00 
    11a2:  48 89 45 f8            mov    %rax,-0x8(%rbp)
    11a6:  31 c0                  xor    %eax,%eax
    11a8:  48 8d 45 f4            lea    -0xc(%rbp),%rax
    11ac:  48 89 c7               mov    %rax,%rdi
    11af:  b8 00 00 00 00         mov    $0x0,%eax
    11b4:  e8 c7 fe ff ff         call   1080 <gets@plt>
    11b9:  90                     nop
    11ba:  48 8b 45 f8            mov    -0x8(%rbp),%rax
    11be:  64 48 2b 04 25 28 00   sub    %fs:0x28,%rax
    11c5:  00 00 
    11c7:  74 05                  je     11ce <input+0x45>
    11c9:  e8 a2 fe ff ff         call   1070 <__stack_chk_fail@plt>
    11ce:  c9                     leave
    11cf:  c3                     ret
00000000000011d0 <other>:
    11d0:  f3 0f 1e fa            endbr64
    11d4:  55                     push   %rbp
    11d5:  48 89 e5               mov    %rsp,%rbp
    11d8:  48 8b 05 61 2e 00 00   mov    0x2e61(%rip),%rax        # 4040 <stderr@GLIBC_2.2.5>
    11df:  48 89 c1               mov    %rax,%rcx
    11e2:  ba 06 00 00 00         mov    $0x6,%edx
    11e7:  be 01 00 00 00         mov    $0x1,%esi
    11ec:  48 8d 05 11 0e 00 00   lea    0xe11(%rip),%rax        # 2004 <_IO_stdin_used+0x4>
    11f3:  48 89 c7               mov    %rax,%rdi
    11f6:  e8 95 fe ff ff         call   1090 <fwrite@plt>
    11fb:  90                     nop
    11fc:  5d                     pop    %rbp
    11fd:  c3                     ret
Вот информация из objdump

Ответы (0 шт):