![]() |
|
![]() ![]() ![]() |
|
VAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.10.2002 Где: Мурманская обл. г . Мончегорск Репутация: нет Всего: нет |
И сразу к телу....
;пользую MASM 32 v8. + RadAsm, приложение под Win .data sBuf byte 255 dup ("Чегото там типа строка",0) .code mov eax,sBuf mov bl, byte ptr[eax] ; что в BL находится ? mov eax, 0 mov bl, byte ptr sBuf[eax] ; а теперь что в BL ? ;И что есть такое физически - ADDR ?(в макросах нашел только SADD) |
|||
|
||||
p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
bl := первый байт содержимого sBuf ("Ч")
То же самое -------------------- С уважением, г-н Посол. |
||||
|
|||||
VAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.10.2002 Где: Мурманская обл. г . Мончегорск Репутация: нет Всего: нет |
Я тоже так думал...
Вот по подробнее: .386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive include windows.inc include kernel32.inc include user32.inc include Comctl32.inc include shell32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib user32.lib includelib Comctl32.lib includelib shell32.lib includelib masm32.lib includelib debug.lib DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM MyProc PROTO :DWORD .const IDD_DIALOG1 equ 101 ;######################################################################### .data sBuf byte 255 dup("А о чем это я...",0) .data? hInstance dd ? ;######################################################################### .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke InitCommonControls invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL invoke ExitProcess,0 ;######################################################################## DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax,uMsg .if eax==WM_INITDIALOG invoke MyProc,ADDR sBuf .elseif eax==WM_COMMAND .elseif eax==WM_CLOSE invoke EndDialog,hWin,0 .else mov eax,FALSE ret .endif mov eax,TRUE ret DlgProc endp MyProc proc psBuf:DWORD pop esi mov esi,psBuf mov al,byte ptr [esi] PrintHex al ; Смотрим в дебагере xor esi,esi mov al,byte ptr psBuf[esi]; !!!!!!!!!!!!!!!! Вываливает ошибку обращения к памяти !!!!!!!!!!!! PrintHex al push esi ret MyProc endp end start |
|||
|
||||
Chingachguk |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
После
мне кажется, в eax будет не адрес sBuf, а ... первые четыре байта. Те никакой не адрес. Следует писать (если я прав):
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||
|
|||||
VAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.10.2002 Где: Мурманская обл. г . Мончегорск Репутация: нет Всего: нет |
Уважаемый обрати внимание на енто:
MyProc proc psBuf:DWORD pop esi mov esi,psBuf mov al,byte ptr [esi] PrintHex al ; Смотрим в дебагере xor esi,esi mov al,byte ptr psBuf[esi]; !!!!!!!!!!!!!!!! Вываливает ошибку обращения к памяти !!!!!!!!!!!! PrintHex al push esi ret MyProc endp Тут то уж точно psBuf - поинтер. |
|||
|
||||
Chingachguk |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Я никогда так не пишу. Напиши все детальнее или посмотри в дизассемблре,
что скомпильнулось. Я бы сделал так:
Ну или так:
Да и чего ты там с esi делаешь ? Зачем ты его pop в самом начале ? Если ты хочешь получить в него адрес возврата, то зачем ты его портишь потом ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||
|
|||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
прально в esi у тебя 0 (xor esi,esi ) в данном случае ето все равно как mov al,[esi] или mov al,[0] нафига вообще ptr использовать? -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
VAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.10.2002 Где: Мурманская обл. г . Мончегорск Репутация: нет Всего: нет |
xor esi,esi mov al,byte ptr psBuf[esi]; Вываливает ошибку обращения к памяти Нет ...усе правельно(в смысле правил языка). Берём байт из масива по нулевому смещению. Во всяком случае так должно быть(но енто не так ![]() |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Тоже думал так, но fasm меня переубедил в обратном, хотя masm - это не fasm... VAV, параметры передаются через стек... Либо masm такой умный и откомпилит по-хитрому, либо ничего так не получится, т.к. значение psBuf надо вначале считать в какой-нибудь регистр... Видимо masm вместо psBuf подставил 0... Скажи, что тебе пишут в окне эксепшена ? Какой-там адрес? -------------------- С уважением, г-н Посол. |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
нихрена не правельно mov esi,mybuff mov al,[esi] или lodsb от так правильно в таком случае читаю первый байт массива -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
VAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.10.2002 Где: Мурманская обл. г . Мончегорск Репутация: нет Всего: нет |
[/QUOTE]mov al,byte ptr psBuf[esi]; Вываливает ошибку обращения к памяти
Напрягся...дизасемблернул ![]() И вот, что увидил: mov al, byte ptr ss:[esi+ebp+08] Откель сегмен стека взялся? Может потому что параметр psBuf передаётся через стек? Делаешь вот так: mov al,byte ptr DS:psBuf[esi]; И усё в норме Дизасм выдает: mov al,byte ptr[esi+ebp+08] А зачем к адресу добавляется 08 ? |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
А зачем ebp добавляется ? ![]() -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Serzh |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 30.9.2003 Где: SPb Репутация: нет Всего: нет |
а зачем тебе 255 раз строку повторять? |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
извращенцы
![]() выкиньте tasmы masmы и прочее radasm прекрасно с fasm работает а в fasm не нада парится с ptr и прочими offset mov esi,mybuff mov al,[esi] mybuff: times 255 db 0 <- буферок на 255 байт и все без всяких извратов -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
VAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.10.2002 Где: Мурманская обл. г . Мончегорск Репутация: нет Всего: нет |
Короче дело к ночи.... ни одного дельного ответа....
Вы расуждаете о том у кого "машина" круче(баба, часы, телефон....). Я не спрашиваю чем пользоваться, я спрашиваю почему так происходит. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |