Вопрос про потоки
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Вопрос про потоки - 2010-03-01 20:53:17.580000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Вопрос такой, код выделяет память, пишет в нее код, этот код исполняется, создает поток, который освобождает выделеную страницу памяти и убивается, а первый поток переходит на другой участок памяти и выполняется. Всегда ли все это будет работать нормально? А то я думаю нужно ли Sleep добавить во второй созданый поток. Вроде и так работает. Но стабильно ли?
|
|
|
RE: Вопрос про потоки - 2010-03-01 22:08:33.813333
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Вобщем нужно задержку в коде второго потока в начале ставить, и не париться тогда.
|
|
|
RE: Вопрос про потоки - 2010-03-01 22:24:16.170000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
По моему мы о разном говорим, мне не надо много кода юзать, мне всего лишь нужно создать второй поток который через 1 сек. освободит выделеную память, и уничтожится. А главная нить будет работать на совсем другой странице памяти. И на второй поток ей все равно
|
|
|
RE: Вопрос про потоки - 2010-03-02 12:44:02.606666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Меня до сих пор похоже не поняли, я создаю второй поток для того что бы он освободил память свою и завершился. А первый поток после создания второго исполняется в другом месте. И в то место нельзя писать код для освобождения. Картина такая: Есть один главный поток. 1) Выделяется память, туда пишется код, туда передается управление. 2) Заполняется память из которой выделялась память(Пишется новый код) А далее нужно передать управление обратно, из выделеной память обратно, таким образом что бы выделеная память освободилась. Я и решил создать второй поток с задержкой, который освободит память VirtualFree, а потом уничтожится. А тем временем главный поток будет спокойно исполнятся в своем месте
|
|
|
RE: Вопрос про потоки - 2010-03-02 13:46:35.340000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
quote:
P.S. Если не секрет, что ты такое хитрое пишешь? Какую-нибудь защиту? Для PE загрузчика код дописываю, что бы память выделеная просто так не болталась.
|
|
|
RE: Вопрос про потоки - 2010-03-02 21:07:33.876666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
quote:
ORIGINAL: rgo quote:
ORIGINAL: Sunzer Меня до сих пор похоже не поняли, я создаю второй поток для того что бы он освободил память свою и завершился. А первый поток после создания второго исполняется в другом месте. И в то место нельзя писать код для освобождения. Картина такая: Есть один главный поток. 1) Выделяется память, туда пишется код, туда передается управление. 2) Заполняется память из которой выделялась память(Пишется новый код) А далее нужно передать управление обратно, из выделеной память обратно, таким образом что бы выделеная память освободилась. Я и решил создать второй поток с задержкой, который освободит память VirtualFree, а потом уничтожится. А тем временем главный поток будет спокойно исполнятся в своем месте Вот после 2. Делаем так, кладём в стек адрес, куда надо передавать управление обратно. Затем кладём туда аргументы для VirtualFree, затем говорим jmp VirtualFree. Всё. VirtualFree освободит память и вернёт управление туда куда надо. Я в курсе. Но мне надо востановить регистры. А после VirtualFree они нарушутся. Так бы уже давно так сделал.
|
|
|
RE: Вопрос про потоки - 2010-03-02 22:12:15.926666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
PUSHAD\ POPAD только 8 регистров общего назначения. Гм:) Какой код я не пойму востановит это все? Ведь в память перезаписаную писать нельзя, т.к. вовредится код. Вы не понимаете что мне нужно. Все что можно исполнять находится в выделеной памяти. Первый поток создает второй поток, потом востанавливает регистры PUSH OEP\RET все регистры целы. А второй поток освобождает память и убивается. Если бы не было задачи в сохранении начальных значений регистров, то можно было бы сделать просто так в конце кода: PUSH … PUSH OEP JMP VirtualFree
|
|
|
|
|