информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsВсе любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft прикрывает Visual Studio... 
 Умер Кевин Митник 
 Массовое внедрение вредоносного... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Здесь-то под многими системами разницы не будет ни какой,... 14.05.04 16:47  Число просмотров: 1399
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
<"чистая" ссылка>
> особенно не вчитывался, но по поводу что в какие сегменты
> кладётся - вроде правильно..
>
> ЗЫЖ почему-то вспомнилась заморочка от макара:
> чем отличается
>
> void f()
> {
> char *str1 = "hello world";
> // от
> char str2[] = "hello world";
> // ...
> }
Здесь-то под многими системами разницы не будет ни какой, правда под Линуксом возникнет ошибка во время выполнения если написать str1[ 0 ] = 'H', а при выполнении str2[ 0 ] = 'H' ошибки не возникнет.
Раз уж зашла тема про массивы и указатели, напишу про один вопросик, который до сих пор не разрешен и покоя мне не дает. В двух разных модулях используется один массив, в одном описан, в другом определен:
char str[] = "hello, world.";
в одном, а в другом
extern char *str;
Причем, естественно extern может присутствовать в первом, и, естественно, отсутствовать во втором. Работа с массивом компилироваться должна с точки зрения языка одиннаково исходя из равнозначности описания и по разному исходя из здравого смысла. А именно оператор *str = 'H' должен дать разные коды для корректной работы.
1)
lea bx, str
mov byte ptr[bx], 'H'
или
mov bx, offset str
mov byte ptr[bx], 'H'
или
mov al, 'H'
mov str, al
если str определен как
str db 'h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '.', 0
или
str label byte
db 'h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '.', 0
2)
mov bx, str
mov byte ptr[bx], 'H'
если str описан как
str dw tmp
tmp db 'h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '.', 0

Неоднозначность какая-то имеет место быть по-моему...
<programming> Поиск 






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


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