Page 2 of 2

Re: Run with OpenDialog

Posted: Wed Nov 09, 2016 4:52 pm
by Leency
RunOD более функционален, может пусть он будет в дистре?

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 12:23 pm
by 0CodErr
Pathoswithin, а что это ещё за

Code: Select all

data_:
http://websvn.kolibrios.org/filedetails ... 5#line-579
Мог бы и в example.asm посмотреть, если не знаешь

Code: Select all

; I_END     - End of compiled image    
http://websvn.kolibrios.org/filedetails ... 4#line-142

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 12:39 pm
by Pathoswithin
http://wiki.kolibrios.org/wiki/Writing_ ... The_header
This is the total size of the program code in bytes, its easy to use a label which you place at the end of the code.
А по факту не понятно, зачем этот параметр вообще нужен - он не используется.

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 12:41 pm
by 0CodErr
>> wiki
>> актуальная информация
ну-ну

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 12:42 pm
by 0CodErr
зачем этот параметр вообще нужен - он не используется
А зачем же ты тогда его изменил-то :lol:

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 1:02 pm
by Siemargl
Pathoswithin wrote:http://wiki.kolibrios.org/wiki/Writing_ ... The_header
This is the total size of the program code in bytes, its easy to use a label which you place at the end of the code.
А по факту не понятно, зачем этот параметр вообще нужен - он не используется.
Используется. Когда я неверно его (или м.б. соседний в заголовке) выставил - КОС отказалась запускать прогу с диагнозом "not an executable"

А вообще, теоретически нужно разделять код и данные для защиты кода от несанкционированного изменения.

Если я правильно подозреваю, в коде OD ошибка - program.end должно указывать как минимум за концом статических данных, т.е что грузить из файла в память ?!

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 1:09 pm
by 0CodErr
Siemargl wrote: в коде OD ошибка - program.end должно указывать как минимум за концом статических данных, т.е что грузить из файла в память ?!
Ну вот оно у меня так и было. Пока кое-то не решил, что он самый "умный" :lol:

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 1:09 pm
by Pathoswithin
Факт: программа работает. Посмотрел в kernel/core/taskman.inc - не используется.

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 1:20 pm
by Siemargl
Pathoswithin wrote:Факт: программа работает. Посмотрел в kernel/core/taskman.inc - не используется.
Ну работать она может и по ошибке)

Если смотрел загрузчик, можешь пояснить, почему 1 и не 2. Т.е как именно проверяется заголовок и что грузится в память.
Мне это нужно на предмет в перспективе подлинкованных к программам ресурсов.
1>Когда я неверно его (или м.б. соседний в заголовке) выставил - КОС отказалась запускать прогу с диагнозом "not an executable"

2>Если я правильно подозреваю, в коде OD ошибка - program.end должно указывать как минимум за концом статических данных, т.е что грузить из файла в память ?!

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 1:51 pm
by Leency
0CodErr
Программа работает и это главное.
Знаешь как сделать более правильно - правь код.

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 2:51 pm
by Pathoswithin
Siemargl
Сейчас вместо этого параметра просто размер самого файла, потому я и не понял его значения. А вот если следующий параметр (количество памяти) будет меньше размера файла, тогда ошибка.

Re: Run with OpenDialog

Posted: Fri Nov 11, 2016 3:40 pm
by CleverMouse
Siemargl wrote:Используется. Когда я неверно его (или м.б. соседний в заголовке) выставил - КОС отказалась запускать прогу с диагнозом "not an executable"
Не используется. Там есть проверка от diamond'а 10-летней давности

Code: Select all

; \begin{diamond}[20.08.2006]
; sanity check (functions 19,58 load app_i_end bytes and that must
; fit in allocated memory to prevent kernel faults)
        cmp     edx, [APP_HEADER_01.i_end]
        jb      .fail
; \end{diamond}[20.08.2006]
- в edx в этот момент равен mem_size - но это всё. Видимо, все остальные использования отмерли вместе с функциями 19 и 58.
Siemargl wrote:А вообще, теоретически нужно разделять код и данные для защиты кода от несанкционированного изменения.
Ядерный PE-загрузчик честно устанавливает права доступа к памяти по атрибутам секций. Отключаемо, естественно, - fasm по умолчанию создаёт одну секцию readable+writable+executable, с которой можно делать что угодно.