Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 12:42   #1
int 20h
Падаван
Пользователь
 
Аватар для int 20h
 
Регистрация: 24.11.2009
Сообщений: 18
По умолчанию цикл

Доброго времени суток.
Есть код
Код:
fr         db '%X', 0
j          db 0
buf       rb 65535
buf_add rb 65535
...
invoke ReadProcessMemory,[hprocesa],[mbi.BaseAddress],buf,[mbi.RegionSize],writebuf

mov esi,dword 0
.loop:
movzx eax, [buf+esi]
invoke wsprintf,j,fr,eax
invoke lstrcat,buf_add,j
inc esi
cmp esi,[writebuf]
jb .loop
Считываю из памяти данные, затем в цикле по 1 байту перевожу в HEX значение, ну и после добовляю всё данные (buf_add) в edit. Проблема в том что если считываеться большой обьём данных (свыше ~10к байт) то в цикле прога вылетает..Я вот думаю может цикл у меня кривой? или что. Может можно вообще по другому как реализовать цикл? Пробовал всякие while, repeat, результат тотже.
-.^
int 20h вне форума Ответить с цитированием
Старый 11.08.2010, 12:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
invoke wsprintf,j,fr,eax
Извиняюсь за оффтоп, но разве после него стек ручками чистить не нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 13:07   #3
int 20h
Падаван
Пользователь
 
Аватар для int 20h
 
Регистрация: 24.11.2009
Сообщений: 18
По умолчанию

Цитата:
но разве после него стек ручками чистить не нужно?
нужно, м.б в этом и трабла, щас порою в эту сторону.
-.^
int 20h вне форума Ответить с цитированием
Старый 11.08.2010, 13:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нужно, м.б в этом и трабла, щас порою в эту сторону.
Не знаю в каком ты пишешь компиляторе но в FASM для этого вместо invoke используется cinvoke, она тогда добавляет от себя ADD ESI,На кол-во параметров*4
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 13:21   #5
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

cdecl будь он ... )
r9m вне форума Ответить с цитированием
Старый 11.08.2010, 13:26   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
cdecl будь он ... )
а причем тут он?
просто криворукие программисты Микросовта не позаботились о очистке мусора, отсюда и легенды о кривом Виндоусе и Сишных библиотеках.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 13:32   #7
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

При том - при том Программисты тут не при делах, просто функция такая, использует соглашение вызова cdecl
r9m вне форума Ответить с цитированием
Старый 11.08.2010, 13:33   #8
int 20h
Падаван
Пользователь
 
Аватар для int 20h
 
Регистрация: 24.11.2009
Сообщений: 18
По умолчанию

Цитата:
Не знаю в каком ты пишешь компиляторе но в FASM для этого вместо invoke используется cinvoke, она тогда добавляет от себя ADD ESI,На кол-во параметров*4
add esi,12 и всё нормально, про cinvoke незнал, спасибо ) Ну впринципе всё заработало почти как часы, если не брать в внимание то что прога начинает подвисать в цикле. Выхода два, реализовать преобразование в нех значение по другому, ну или крутить цикл в отдельном потоке )
Вопрос закрыт, всем спасибо.
Цитата:
просто функция такая, использует соглашение вызова cdecl
в этом вся и трабла )
-.^
int 20h вне форума Ответить с цитированием
Старый 11.08.2010, 13:48   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Программисты тут не при делах, просто функция такая, использует соглашение вызова cdecl
Ну неужели нельзя было спроектировать таким образом чоб мусор нормально убирался? Не верю.
Цитата:
lstrcat
Если не секрет это ты для чего прикрутил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 14:16   #10
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Цитата:
Ну неужели нельзя было спроектировать таким образом чоб мусор нормально убирался? Не верю.
Ты сам должен об этом заботиться! Они это тебе как крутому программисту доверили. Почитай вот полезняшку, что бы потом небыло у тебя глупых высказываний (http://en.wikipedia.org/wiki/X86_calling_conventions)
r9m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
цикл Aqil_f Microsoft Office Excel 2 10.06.2009 15:40
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34