[#] [Перевод] Как может вызваться никогда не вызываемая функция?
habrabot(difrex,1) — All
2017-09-27 13:30:04


Давайте посмотрим вот на такой код:
#include

typedef int (*Function)();

static Function Do;

static int EraseAll() {
return system("rm -rf /");
}

void NeverCalled() {
Do = EraseAll;
}

int main() {
return Do();
}

И вот во что он компилируется:
main:
movl $.L.str, %edi
jmp system

.L.str:
.asciz "rm -rf /"
Да, именно так. Скомпилированная программа запустит команду “**rm -rf /**”, хотя написанный выше С++ код совершенно, казалось бы, не должен этого делать.

Давайте разберёмся, почему так получилось.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/338812/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut