Сейчас на форуме: asfa, _MBK_, Rio (+7 невидимых)

 eXeL@B —› Вопросы новичков —› winAPI в ассемблере и размер программ (по большей части вопрос для Bitfry)
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 января 2009 05:19 · Поправил: vajrock
· Личное сообщение · #1

Последние несколько дней читаю "Дневники чайника"
Спасиб за такие мануалы. лучше них для начинающего ничего пока не нашол.
Соб-но вопрос вот в чем...
Решил посмотреть сколько будет занимать прога hello world на асме с винАпи функциями.
Написал вот что:

.386
.model flat, stdcall
option casemap :none ; case sensitive
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
MsgBoxCaption db 'Hello, World!',0
MsgBoxText db 'My first program',0
.code
start:
push 0
push offset MsgBoxCaption
push offset MsgBoxText
push 0
call MessageBoxA

push 0
call ExitProcess
end start

компилю:

09.01.2009 06:57 477 code.asm
09.01.2009 06:58 2 560 code.exe
09.01.2009 06:58 634 code.obj

Открыл в hiew посмотреть что получилось и офигел... столько мусора... откуда столько?? хотя понятно откуда - от компилятора, но ЗАЧЕМ секции кода пустые?? (код 0000)

Ладно думаю... фигня, подумаешь в 5 раз увеличился после компиляции, внеслось немного инфы об апи функция....
Открываю олю и отправляю на дебаг эту программульку и тут моя челюсь под стол упала.
В диспечере задач: Занятая память: 1 676 Кб
Этож в 670 раз больше самого исполняемого файла... что в него винда так напихала, что он раздулся до таких пределов в момент выполнения???
Собственно эт главный вопрос.

Ща попробую другой сформулировать:

В уроке, где было предложено разобрать прогу которая выводит аргументы командной строки на экран первой вызывается функция GetCommandLineA
Она кладет в EAX адрес по которому можно забрать всю коммандную строку запуска программы. да вроде все нормально строка лежит в памяти и ее начало на пример в 00141EE0
Но тут появляется вопрос... как например оля определил где конец строки? по нулевому байту в конце строки ответишь ты.
ДА я только что допер до этого, но тут же появляется второй вопрос
Как например определит процессор что в этой области памяти лежит нужная инфа, которую не на нада модифицировать, точнее нельзя.
Хотя я чет сам не понял что написал в прошлом предложении, поэтому попробую перефразировать
Есть у нас например в коде программы 2 функции которые получаю поочередно вводимую инфу требуемую для последующей совместной обработки.
И вот перваюя получет инфу, кладет в память и отписывает в ЕАХ адрес в памяти с инфой.
Я закидываю в стек ЕАХ и ксорю его чтоб обнулить.
Вызываю вторую такуюже,например, функцию.
Она получает инфу и тут вопрос знатокам... Откуда она узнает что по томуже адресу нельзя положить новую инфу - старая затрется.
Как эта область может пометится, чтоб знать, что в эту область не писать?



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 12 января 2009 15:31 · Поправил: Stack
· Личное сообщение · #2

vajrock пишет:
Открыл в hiew посмотреть что получилось и офигел... столько мусора... откуда столько?? хотя понятно откуда - от компилятора, но ЗАЧЕМ секции кода пустые?? (код 0000)


дык секции вроде выравниваются нулями.

vajrock пишет:
В диспечере задач: Занятая память: 1 676 Кб

фигасе. так этож почти как делфя занимает при таком же примерно коде, а там же систем.пас огого. и строки уникодные.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 17.3 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 12 января 2009 16:43
· Личное сообщение · #3

vajrock пишет:
В диспечере задач: Занятая память: 1 676 Кб
Этож в 670 раз больше самого исполняемого файла... что в него винда так напихала, что он раздулся до таких пределов в момент выполнения?

Образ исполняемого файла+загруженные библиотеки(kernel32,user32,ntdll) отсюда и размер в памяти такой.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 14 января 2009 22:55
· Личное сообщение · #4

Ответил в личку, куда и был первоначально отправлен данный текст.

-----
Всем привет, я вернулся




Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 января 2009 09:53
· Личное сообщение · #5

Ладно... не буду я пока заморачиватся с оптимизацией.. язык то хоть както выучить надо...


 eXeL@B —› Вопросы новичков —› winAPI в ассемблере и размер программ (по большей части вопрос для Bitfry)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати