dompdf, firefox зависает в формате PDF

Руководство по запуску: как злоупотреблять указателями функций в GCC на машинах x86, компилируя ваш код вручную:

  1. Возвращает текущее значение в регистре EAX
    int eax = ((int(*)())("\xc3 <- This returns the value of the EAX register"))();
    
  2. Запись функции подкачки
    int a = 10, b = 20;
    ((void(*)(int*,int*))"\x8b\x44\x24\x04\x8b\x5c\x24\x08\x8b\x00\x8b\x1b\x31\xc3\x31\xd8\x31\xc3\x8b\x4c\x24\x04\x89\x01\x8b\x4c\x24\x08\x89\x19\xc3 <- This swaps the values of a and b")(&a,&b);
    
  3. Запись счетчика для цикла до 1000, вызов какой-либо функции каждый раз
    ((int(*)())"\x66\x31\xc0\x8b\x5c\x24\x04\x66\x40\x50\xff\xd3\x58\x66\x3d\xe8\x03\x75\xf4\xc3")(&function); // calls function with 1->1000
    
  4. Вы даже можете записать рекурсивную функцию, которая до 100
    const char* lol = "\x8b\x5c\x24\x4\x3d\xe8\x3\x0\x0\x7e\x2\x31\xc0\x83\xf8\x64\x7d\x6\x40\x53\xff\xd3\x5b\xc3\xc3 <- Recursively calls the function at address lol.";
    i = ((int(*)())(lol))(lol);
    
0
задан Paul 13 July 2018 в 09:12
поделиться