Вопросы по некоторым функциям...
-
1. Функция 64 (sys_resize_app_memory) в каких единицах задается размер - байтах или страницах? А какой начальной адрес етой памяти? Все запрошенные страницы выделяются сразу, или когда программа пытается читать/писать там? Выделенная память заполнена чем нибудь или может содержать какого нибудь мусора.
фунция аналог brk() и определяет новый размер всей доступной приложению памяти. Размер задаётся в байтах, но ядро округляет вверх на размер страницы. Страницы выделяются при первом обращении к ним, ядро их обнуляет.
А начальной адрес это сразу после инициализированные данные или после неинициализированные?
Не очень точный термин "начальный адрес".
Представь что это комната в которой можно менять высоту потолка вверх и вниз, а f.64 устанавливает эту высоту.
Обычный заголовок приложения: mem_size это общий размер выделенной памяти (высота потолка) после запуска приложения. Если ты увеличишь размер, то новая память будет выделяться после mem_size.
Представь что это комната в которой можно менять высоту потолка вверх и вниз, а f.64 устанавливает эту высоту.
Обычный заголовок приложения:
Code: Select all
struct APP_HEADER
banner dq ?
version dd ? ;+8
start dd ? ;+12
i_end dd ? ;+16
mem_size dd ? ;+20
stack_top dd ? ;+24
i_param dd ? ;+28
i_icon dd ? ;+32
ends
Не совсем ясно. Скажем так:
mem_size = $100000
и задаем eax=64, ebx=1, ecx=4096
Какой будет последний доступный адрес памяти? 100fffh или нет?
mem_size = $100000
и задаем eax=64, ebx=1, ecx=4096
Какой будет последний доступный адрес памяти? 100fffh или нет?
0x0FFF
Теперь ясно. Выходит что программа может сама себе уничтожит.
Это Колибри, здесь и не только такое возможно.johnfound wrote:Теперь ясно. Выходит что программа может сама себе уничтожит.
Это не проблема, только несколько непривычно. Может стоит описание в вики сделать несколько подробнее.Mario wrote:Это Колибри, здесь и не только такое возможно.
Ну, продолжаю с вопросами...
Как правильно закончить приложение? фн.-1 завершает текущего потока. А как насчет других потоков процеса? фн.18.2 или фн.18.18? Но как узнать какие потоки принадлежат приложению?
Как правильно закончить приложение? фн.-1 завершает текущего потока. А как насчет других потоков процеса? фн.18.2 или фн.18.18? Но как узнать какие потоки принадлежат приложению?
Создать в памяти структуру и каждый запускающийся поток, первым делом, должен регистрировать штатный запуск и штатное завершение себя любимого. Если он еще не сделал себе сепуку или его порешили внешние обстоятельства, то ведущий (изначальный поток) перед своим завершением расстреливает всех своих псевдодетей. Даже если их уже нет в нашем подлом и коварном мире.
Метод естественно имеет некоторые ограничения, однако в штатных ситуациях вполне работоспособен. Как пример можно посмотреть код программы zSea.
Метод естественно имеет некоторые ограничения, однако в штатных ситуациях вполне работоспособен. Как пример можно посмотреть код программы zSea.
Все в твоих руках.johnfound wrote:Это не проблема, только несколько непривычно. Может стоит описание в вики сделать несколько подробнее.Mario wrote:Это Колибри, здесь и не только такое возможно.
А как? Редактирование разрешено только участников, а регистрация выключена.Mario wrote:Все в твоих руках.
Может сделать расширенную версию eax = -1 ebx = -1 завершающую все потоки в многопоточном приложении ?
johnfound: Это было сделано после спам-атаки, когда reCAPTCHA показала свою несостоятельность. Напиши, пожалуйста, в личку, я сделаю аккаунт.