Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Адресация Win32, Проблемы со строками. 
:(
    Опции темы
VAV
  Дата 18.2.2004, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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)


PM MAIL   Вверх
p0s0l
Дата 18.2.2004, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
mov eax,sBuf
mov bl, byte ptr[eax] ; что в BL находится ?

bl := первый байт содержимого sBuf ("Ч")
Цитата
mov eax, 0
mov bl, byte ptr sBuf[eax] ; а теперь что в BL ?

То же самое



--------------------
С уважением, г-н Посол.
PM   Вверх
VAV
Дата 18.2.2004, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
Chingachguk
Дата 18.2.2004, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



После

Цитата

mov eax,sBuf


мне кажется, в eax будет не адрес sBuf, а ... первые четыре байта. Те никакой не адрес.

Следует писать (если я прав):

Цитата

mov  eax,offset sBuf ; Самое понятное, так надо писать

lea  eax,sBuf ; или даже
lea  eax,sBuf[0] ; Это хуже, но для локальных переменных бывает полезно

mov  eax,ADDR sBuf ; примочка masm, лучше не юзать. Даже в Invoke




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
VAV
Дата 18.2.2004, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 - поинтер.
PM MAIL   Вверх
Chingachguk
Дата 18.2.2004, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Я никогда так не пишу. Напиши все детальнее или посмотри в дизассемблре,
что скомпильнулось.

Я бы сделал так:

Цитата

psBuf equ [ebp+8h]
MyProc proc
  push ebp
  mov  ebp,esp
  mov  eax,psBuf
  mov  al,[eax]

  ...
  pop  ebp
  ret  4
MyProc edp


Ну или так:

Цитата

psBuf equ [esp+4]
MyProc proc
  mov  eax,psBuf
  mov  al,[eax]

  ...
  ret  4
MyProc edp


Да и чего ты там с esi делаешь ? Зачем ты его pop в самом начале ? Если ты хочешь получить в
него адрес возврата, то зачем ты его портишь потом ?


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
oleg1973
Дата 18.2.2004, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



Цитата
xor esi,esi  mov al,byte ptr psBuf[esi]; !!!!!!!!!!!!!!!! Вываливает ошибку обращения к памяти !!!!!!!!!!!!

прально в esi у тебя 0 (xor esi,esi )
в данном случае ето все равно как mov al,[esi] или mov al,[0]
нафига вообще ptr использовать?





--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
VAV
Дата 19.2.2004, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.10.2002
Где: Мурманская обл. г . Мончегорск

Репутация: нет
Всего: нет



Цитата(oleg1973 @ 18.2.2004, 19:41)
прально в esi у тебя 0 (xor esi,esi )
в данном случае ето все равно как mov al,[esi] или mov al,[0]

xor esi,esi
mov al,byte ptr psBuf[esi]; Вываливает ошибку обращения к памяти

Нет ...усе правельно(в смысле правил языка).
Берём байт из масива по нулевому смещению. Во всяком случае так должно быть(но енто не так confused.gif )
PM MAIL   Вверх
p0s0l
Дата 19.2.2004, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
мне кажется, в eax будет не адрес sBuf, а ... первые четыре байта. Те никакой не адрес

Тоже думал так, но fasm меня переубедил в обратном, хотя masm - это не fasm...

VAV, параметры передаются через стек...
Либо masm такой умный и откомпилит по-хитрому, либо ничего так не получится, т.к. значение psBuf надо вначале считать в какой-нибудь регистр... Видимо masm вместо psBuf подставил 0... Скажи, что тебе пишут в окне эксепшена ? Какой-там адрес?



--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 19.2.2004, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



Цитата
Нет ...усе правельно(в смысле правил языка).
Берём байт из масива по нулевому смещению. Во всяком случае так должно быть(но енто не так  )

нихрена не правельно

mov esi,mybuff
mov al,[esi] или lodsb

от так правильно в таком случае
читаю первый байт массива


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
VAV
Дата 20.2.2004, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.10.2002
Где: Мурманская обл. г . Мончегорск

Репутация: нет
Всего: нет



[/QUOTE]mov al,byte ptr psBuf[esi]; Вываливает ошибку обращения к памяти
Напрягся...дизасемблернул smile.gif

И вот, что увидил:
mov al, byte ptr ss:[esi+ebp+08]

Откель сегмен стека взялся? Может потому что параметр psBuf передаётся через стек?
Делаешь вот так:
mov al,byte ptr DS:psBuf[esi]; И усё в норме
Дизасм выдает:
mov al,byte ptr[esi+ebp+08]

А зачем к адресу добавляется 08 ?
PM MAIL   Вверх
Chingachguk
Дата 20.2.2004, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата
А зачем к адресу добавляется 08 ?


А зачем ebp добавляется ? smile.gif


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Serzh
Дата 20.2.2004, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



Цитата(VAV @ 18.2.2004, 19:20)
.data
sBuf byte 255 dup ("Чегото там типа строка",0)

а зачем тебе 255 раз строку повторять?
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 20.2.2004, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



извращенцы smile.gif
выкиньте 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
PM MAIL WWW ICQ   Вверх
VAV
Дата 22.2.2004, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.10.2002
Где: Мурманская обл. г . Мончегорск

Репутация: нет
Всего: нет



Короче дело к ночи.... ни одного дельного ответа....
Вы расуждаете о том у кого "машина" круче(баба, часы, телефон....).
Я не спрашиваю чем пользоваться, я спрашиваю почему так происходит.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.