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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[ASM&pas] to Chingachguk. 14.04.02 22:37  Число просмотров: 870
Автор: kar Статус: Незарегистрированный пользователь
<"чистая" ссылка>
см выше ..)
<programming>
[ASM&pas] компоновка DATA-сегментов. 13.04.02 01:06  
Автор: kar Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Здрям кого не видел..
..дык вот, ситуация такая:
Есть главная прога написанная на паскале и obj-файл напис. на асме.
Нужно скопоновать(склеить) DATA-сегменты.
...что я сделал:
объявил DATA segment c public'ом, все грамотно описал,подсоединил obj,
усе объвил...ан нет - говно...к DAT'е ничего не дописывается... :(

..Есть какие идеи?
[ASM&pas] компоновка DATA-сегментов. 13.04.02 03:46  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> ..Есть какие идеи?

Из книги Пирогова "ASSEMBLER: Учебный курс":

... Доступ к данным в программе на языке Турбо Паскаль можно получить через сегменты CONST или оканчивающиеся на _DATA(инициализированные переменные) или через сегменты с именами DATA, DSEG и оканчивающиеся на _BSS...

Пример:

DATA SEGMENT WORD 'DATA'
EXTRN S:NEAR
DATA ENDS
...
Var
S:STRING
...
S:='Pascal forewer ! )' ;
...
[ASM&pas] поясняю.. 13.04.02 19:48  
Автор: kar Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Из книги Пирогова "ASSEMBLER: Учебный курс":
>...

Допустим есть есть два сегмента данных: сегмент (1) Pascal и сегмент (2) Obj.
Мне нужно их скомпоновать (склеить),так, чтобы не терялись данные сегмента (2) (..у меня теряются).

Из книги Рудакова и Федотова "Основы языка Pascal":
Программа на асме должна удовлетворять ряду требований.
Ее имя должно быть объявлено директивой public;сама подпрограмма должна размещаться в сегменте с именем CODE локальные переменные
должны быть размещены в сегменте с именем DATA ...

Ну это я и сделал... компоновка вроде без ошибок... но на дампе памяти сегмента данных информация почему-то из DATA оbj-файла не обнаруживается...

пи.эс. Пробобал различные имена (типа DSeg, _DATA..)...проблема та же Ж(
[ASM&pas] поясняю..Код дай глянуть ;) 15.04.02 00:23  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> Допустим есть есть два сегмента данных: сегмент (1) Pascal
> и сегмент (2) Obj.
> Мне нужно их скомпоновать (склеить),так, чтобы не терялись
> данные сегмента (2) (..у меня теряются).

Пардон, не понял, что значит - "теряются" ? Ты не мог бы привести код свой, по возможности упрощенный, и пояснить, как и что там в данных пропадает ? ;)

> ...должны быть размещены в сегменте с именем DATA ...
>
> Ну это я и сделал... компоновка вроде без ошибок... но на
> дампе памяти сегмента данных информация почему-то из DATA
> оbj-файла не обнаруживается...

Эээ, а какая разница, что там в OBJ ? ;)
Мне вот фиолетово, как там происходит эта компоновка и что там как называется - главное, чтобы В РЕЗУЛЬТАТЕ было все верно !
Я правильно понимаю, что ты:

- Размещаешь в сегменте данных В АСМ-КОДЕ данные;
- Компонуешь их с пасом;
- Но не видишь их ... где ? В exe ? Или в OBJ ?

> пи.эс. Пробобал различные имена (типа DSeg,
> _DATA..)...проблема та же Ж(

Так что давай свой код - я взгляну на него и разберемся ;)

Удачи !
[ASM&pas] код.. 15.04.02 01:20  
Автор: kar Статус: Незарегистрированный пользователь
<"чистая" ссылка>
..делаем так..
(1.)
В obj файле объявляю сегмент данных (сегмент кода неважен..)

DATA segment byte public ;почему именно "DATA" - так написанно
hz dw 0666h ;в книжке ..см выше..
DATA ends

CODE segment byte public
assume cs:CODE,ds:DATA
;код...
CODE ends
end

(2.)
затем создаю obj.. далее в pas-проге прописываю {$l name_obj},
компилю...(в пасе)

(3.)
Захожу в TD (turbo debuger) открываю exe (скопилированный на пасе :)
открываю dump (ориенитированный по ds и указывающий на 'общий' сегмент данных,то есть соединенный из obj-сегмента и сегмента данных пас программы)
...и что вижу:все данные ,что описаны были в пас-программе, есть - а что в obj сегменте - НЕТУ (нУ просто Их нет,то есть нет к примеру того самого "hz")

вот чЕ делать????

Ps А что насчет разных имен... то помимо имени 'DATA' пробовал и другие
(_DATA DSeg _BSS - проблема та же...данных из obj не находит)
[ASM&pas] код.. 16.04.02 22:44  
Автор: Dude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Может, это и не к тому совсем, но я все-таки скажу:
я когда сливаю АСМ и С код и не указываю класс (типа 'DATA'), то у меня и не сливаются. В твоем коде я не видел объявления класса. Т.е., может быть, стоит попробовать

data segment public 'DATA'
(т.е., написать в конце 'DATA')
(ну, а я пишу "_data segment public 'DATA' ").

И еще: попробуй слить их tlink'ом (или чем-то вроде того), он в map-е указывает, что слил, а что нет, и можно увидеть разницу между твоим сегментом и родным паскальным.
[ASM&pas] согласен с Chingachgukom, но изголится можно :-) 16.04.02 19:10  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> ..делаем так..
> (1.)
> В obj файле объявляю сегмент данных (сегмент кода
> неважен..)
>
> DATA segment byte public ;почему именно "DATA" - так
> написанно
> hz dw 0666h ;в книжке ..см выше..
> DATA ends
>
> CODE segment byte public
> assume cs:CODE,ds:DATA
> ;код...
> CODE ends
> end
>
> (2.)
> затем создаю obj.. далее в pas-проге прописываю {$l
> name_obj},
> компилю...(в пасе)
>
> (3.)
> Захожу в TD (turbo debuger) открываю exe (скопилированный
> на пасе :)
> открываю dump (ориенитированный по ds и указывающий на
> 'общий' сегмент данных,то есть соединенный из obj-сегмента
> и сегмента данных пас программы)
> ...и что вижу:все данные ,что описаны были в пас-программе,
> есть - а что в obj сегменте - НЕТУ (нУ просто Их нет,то
> есть нет к примеру того самого "hz")
>
> вот чЕ делать????
>
> Ps А что насчет разных имен... то помимо имени 'DATA'
> пробовал и другие
> (_DATA DSeg _BSS - проблема та же...данных из obj не
> находит)

// данные поместить в сегмент code, иначе пас начнет ругаться
.286
public S
CODE segment byte public
S db 4,'TEST','$'
CODE ends
END

// в Паскале вызываем это так
program Test;
{$L test.obj}
var
ps : ^string;
procedure S; external;
begin
ps := Addr(S);
writeln(ps^);
end.

В принципе, это то же самое что вызвать ф-ю асма возвращающую указатель на данные

P. S. Ну и нафига тебе такой гемор
НЕ выйдет ... (я так думаю) 15.04.02 04:22  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Ответ: НИКАК.

Я попробовал разместить в сегменте CONST строку: S db 4,'TEST':

.286
CONST SEGMENT BYTE PUBLIC
S db 4,'TEST','$'
CONST ENDS
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE
PUBLIC MY_PROC
MY_PROC PROC NEAR
PUSH BP
MOV BP,SP
pusha
mov dx,offset S+1
mov ah,09h
int 21h
xor ax,ax
int 16h
popa
POP BP
RET
MY_PROC ENDP
CODE ENDS
END

Она видна в exe, и код ее выведет(в смысле, если позвать MY_PROC). Тут все в порядке. Однако если написать:

WriteLN(S); - компиллер ругнется на это.

Если определить в блоке CONST ее:

const
S: string[5]='?';

То все зашибись. НО ЭТО ДРУГАЯ СТРОКА !

Почему так ? Думаю, пас вообще не может это собрать(в смысле на момент обработки WriteLN(s);) ОН НЕ ЗНАЕТ НИЧЕГО про то, что в obj описана такая константа ... Он пытается перевести pas в асм, потом собрать obj и только потом линкует. Да, линковщик знает о всех именах и может собрать такое. Но пас-то ничего не знает в момент обработки кода на пасе ...

Ты можешь спросить: А как же он подключает процедуру ? Например, MY_PROC ? Ответ: ты ее описал (как external), ты просто дал ему ПРОТОТИПЫ ее - вот он и может сделать свой асм-прекод. А вот данные описать аналогично - фиг, нельзя ...

Хотя, может, я и ошибаюсь, но не думаю, что сильно ...

Можешь делать так: вызывать процедурки типа "дай-ка мне адрес" -> потом с ним работать(например, как с указателем)...
[ASM&pas] to Chingachguk. 14.04.02 22:37  
Автор: kar Статус: Незарегистрированный пользователь
<"чистая" ссылка>
см выше ..)
[ASM&pas] компоновка DATA-сегментов. 13.04.02 02:18  
Автор: CETb2 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
В седьмом Паскале можно писать в код программы - код ассемблера .
Вместо begin пишешь ASM.

Procedure (nnnnnnnnnnn);
const
a='123';
asm
end;

Может это выход ?
1




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


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