информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ну ладно, совсем зачморили 19.11.01 15:51  Число просмотров: 1013
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Нафига MASMу вообще эта end нужна, если он немного за меня не может подумать, и если я не вписал ret, сделать это.
<programming>
Хех, давненько ассемблером не баловался 15.11.01 15:07  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Решил простенький код в ассемблерном виде посмотреть:
a = 5;

Сгенерил мне:
mov DWORD PTR _a$[ebp], 5

Теперь в коде написал:
__asm
{
mov DWORD PTR _a$[ebp], 5
}

Компилер обиделся. Переписал:
__asm
{
mov DWORD PTR a, 5
}

Сгенерил мне опять
mov DWORD PTR _a$[ebp], 5

Вот сволочь какая :) ассемблерные вставки поганит. А как MSVC 6, объяснить что не надо курочить то, что под __asm написанно ?
Запутался в трех строчках :) 16.11.01 17:16  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
mov ax,6
mov bx,2
div bx

Т.к. собираю как консоль, то сразу вищу эксепшен: Integer overflow
Это как же его мать, извиняюсь понимать ? 6/2 = overflow ?
xor dx,dx 16.11.01 17:27  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
Блин, а ведь я на слово делил... :))) 16.11.01 17:47  
Автор: PS <PS> Статус: Elderman
Отредактировано 16.11.01 18:24  Количество правок: 1
<"чистая" ссылка>
Зашибись. Нет, С мне явно больше нравится :)
Так, а что ему теперь не подуше ?
.386P
.model FLAT

includelib c:\masm32\lib\msvcrt.lib
includelib c:\masm32\lib\windows.lib

.code
_main proc
xor dx,dx
mov ax,6
mov bx,2
div bx
_main ENDP
END

The exception unknown software exception (0xc00000fd) ?
Правда я забил на стек, ну и что ?

ОТВЕТ:
КРУТО ! Надо поставить ret 0
я в шоке, а нафига тогда все эти end & endp ?
я просто охреневаю 17.11.01 08:12  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Зашибись. Нет, С мне явно больше нравится :)
> Так, а что ему теперь не подуше ?
> .386P
> .model FLAT
>
> includelib c:\masm32\lib\msvcrt.lib
> includelib c:\masm32\lib\windows.lib
>
> .code
> _main proc
> xor dx,dx
> mov ax,6
> mov bx,2
> div bx
> _main ENDP
> END
>
> The exception unknown software exception (0xc00000fd) ?
> Правда я забил на стек, ну и что ?
>
> ОТВЕТ:
> КРУТО ! Надо поставить ret 0
> я в шоке, а нафига тогда все эти end & endp ?

ну вы блин даете! может тебе действительно не слезать с си...
нет такой команды END/ENDP
ты читал когда-нибудь "Система команд ix86" ???
если это "КРУТО".............
мда 19.11.01 15:49  
Автор: Rook <Alex Sergeev> Статус: Member
<"чистая" ссылка>
> > Зашибись. Нет, С мне явно больше нравится :)
> > Так, а что ему теперь не подуше ?
> > .386P
> > .model FLAT
> >
> > includelib c:\masm32\lib\msvcrt.lib
> > includelib c:\masm32\lib\windows.lib
> >
> > .code
> > _main proc
> > xor dx,dx
> > mov ax,6
> > mov bx,2
> > div bx
> > _main ENDP
> > END
> >
> > The exception unknown software exception (0xc00000fd)
> ?
> > Правда я забил на стек, ну и что ?
> >
> > ОТВЕТ:
> > КРУТО ! Надо поставить ret 0
> > я в шоке, а нафига тогда все эти end & endp ?
>

ну так это ж не си, чтоб end** еще и возврат исполнял. Головой думать надо, а не руками.


> ну вы блин даете! может тебе действительно не слезать с
> си...
> нет такой команды END/ENDP
> ты читал когда-нибудь "Система команд ix86" ???
> если это "КРУТО".............
старнно, мне казалось x86, а не ix86 :)
Ну ладно, совсем зачморили 19.11.01 15:51  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Нафига MASMу вообще эта end нужна, если он немного за меня не может подумать, и если я не вписал ret, сделать это.
Ну ладно, совсем зачморили 20.11.01 14:11  
Автор: Rook <Alex Sergeev> Статус: Member
<"чистая" ссылка>
> Нафига MASMу вообще эта end нужна, если он немного за меня
> не может подумать, и если я не вписал ret, сделать это.
а для чего нужен end в pascal, или } в с/c++ ?
просто в языках высокого уровня (но опять-таки не вовсех и после 97 года) эта вещь проверяется и устанавливается компилятором , причем изменить код возврата не всегда возможно.
Приплыли 20.11.01 15:06  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
> а для чего нужен end в pascal, или } в с/c++ ?
; 16 : }
pop edi
pop esi
pop ebx
add esp, 64
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0

Вот зачем. Примерно такое я и ожидал от endp в MASMе. Ну хотя бы ret 0.
Приплыли 20.11.01 15:27  
Автор: Rook <Alex Sergeev> Статус: Member
<"чистая" ссылка>
> > а для чего нужен end в pascal, или } в с/c++ ?
> ; 16 : }
> pop edi
> pop esi
> pop ebx
> add esp, 64
> cmp ebp, esp
> call __chkesp
> mov esp, ebp
> pop ebp
> ret 0
>
> Вот зачем. Примерно такое я и ожидал от endp в MASMе. Ну
> хотя бы ret 0.

это был реторический вопрос.
но если тебе так лень писать ret воспользуйся Cristal Assemblerom (340 мб) со всеми библиотеками, он за тебя все что угодно сделает
Приплыли 20.11.01 15:23  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> > а для чего нужен end в pascal, или } в с/c++ ?
> ; 16 : }
> pop edi
> pop esi
> pop ebx
> add esp, 64
> cmp ebp, esp
> call __chkesp
> mov esp, ebp
> pop ebp
> ret 0
>
> Вот зачем. Примерно такое я и ожидал от endp в MASMе. Ну
> хотя бы ret 0.

максимум чего тебе даст ENDP - подкорректирует тип RET-ов (которые все же при этом должны быть)
И еще пару ламерских вопросиков :) 15.11.01 16:01  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
только ногами не бейте - лет 7 за ассемблером не сидел.
При push стек куда двигается к старшим адресам или к младшим ?
Что считается "верхом" а что "низом" стека ?
Какой глубиный смысл в этих строках ?
push ebp
mov ebp, esp
sub esp, 64
И еще пару ламерских вопросиков :) 15.11.01 16:12  
Автор: Paul Lee Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> только ногами не бейте - лет 7 за ассемблером не сидел.
> При push стек куда двигается к старшим адресам или к
> младшим ?
к младшим
> Что считается "верхом" а что "низом" стека ?
эт смотря откуда смотреть :)
> Какой глубиный смысл в этих строках ?
> push ebp
сохраняем ebp используемый вызывающей процедурой
> mov ebp, esp
устанавливаем ebp на стек для работы с параметрами и локальными переменными
> sub esp, 64
резервируем место в стеке для локальных переменных
А ! Все, вспомнил, спасибо :) И еще одно :) 15.11.01 16:24  
Автор: PS <PS> Статус: Elderman
Отредактировано 15.11.01 16:28  Количество правок: 1
<"чистая" ссылка>
Если у меня sp == bp и я делаю pop. Т.е. верх стека становится ниже низа стека: эту ситуацию отловит проц или мне самому надо чекать такие вещи ?
А ! Все, вспомнил, спасибо :) И еще одно :) 15.11.01 16:39  
Автор: Paul Lee Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Если у меня sp == bp и я делаю pop. Т.е. верх стека
> становится ниже низа стека: эту ситуацию отловит проц или
> мне самому надо чекать такие вещи ?
bp используется в данном случае исключительно для адресации внутри стека и никак не влияет на переполнение. Ну а за стеком надо бы следить конечно
Хех, давненько ассемблером не баловался 15.11.01 15:56  
Автор: Paul Lee Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Решил простенький код в ассемблерном виде посмотреть:
> a = 5;
>
> Сгенерил мне:
> mov DWORD PTR _a$[ebp], 5
>
> Теперь в коде написал:
> __asm
> {
> mov DWORD PTR _a$[ebp], 5
> }
>
> Компилер обиделся. Переписал:
> __asm
> {
> mov DWORD PTR a, 5
> }
>
> Сгенерил мне опять
> mov DWORD PTR _a$[ebp], 5
>
> Вот сволочь какая :) ассемблерные вставки поганит. А как
> MSVC 6, объяснить что не надо курочить то, что под __asm
> написанно ?

Насколько могу понять _a$ это смещение в стеке до локальной переменной a, которое генерится компилятором. Указание ее в исходнике имхо некорректно.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach