2015-08-04 1 views
0

Когда я выполняю двоичный код, я хочу, чтобы их сегмент стека был заполнен специальными данными. Все, что я делаю, это просто программа для записи, которая выделяет огромный буфер в стеке, вызывает много malloc и mmap и, например, заполняет всю эту память символом «A». Затем я проверяю и вижу, что около 80% всей памяти используется моей программой. Затем я останавливаю эту программу и запускаю другую программу, которая просто проходит стек и проверяет значения в стеке. В любом случае я не вижу своего персонажа «А». Может кто-нибудь сказать мне, как я могу это сделать?Могу ли я заставить linux-ядро использовать определенные страницы памяти для нового исполняемого файла

UPD Почему я делаю это просто из-за одного ctf. Я упоминаю задачу как.

int func() 
{ 
    int i; 
    if(i == 0xdeadbeef) 
     system("cat flag"); 
    else 
     func(); 
} 

int main() 
{ 
    func(); 
} 
+1

Зачем вам это нужно? –

+1

Как раз для того, чтобы получить это право: вы пишете память одним процессом, завершаете это и жалуетесь, что процесс _different_ не видит данные, которые первый написал? Вы когда-нибудь занимаетесь логической памятью и инкапсуляцией процесса? – Olaf

+0

@ FilipeGonçalves, играя ctf, я упомянул о тривиальной задаче; main {int i; if (i == 0xdeadbeef), то откройте shell} else go recursion – user2779060

ответ

2

Нет, не внеся серьезных изменений в ядро. Новые анонимные страницы всегда заполняются нулями, и даже если вы можете заполнить их чем-то другим, не было бы разумного способа заставить их переносить данные из старых процессов. Это будет огромной дырой в безопасности.