Сейчас на форуме: user99, _MBK_, ManHunter, Magister Yoda (+8 невидимых)

 eXeL@B —› Основной форум —› Диззасемблирование проги TurboPascal
Посл.ответ Сообщение

Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 октября 2005 15:21 · Поправил: jungle
· Личное сообщение · #1

Дизассемблировал программу на turbo Pascal. Вырезка из ida(считываются данные из файла):
seg000:0092                 lea     di, [bp-180h]
seg000:0096                 push    ss
seg000:0097                 push    di
seg000:0098                 lea     di, [bp-278h]
seg000:009C                 push    ss
seg000:009D                 push    di
seg000:009E                 call    @Read$qm4Filem3Any ; Read(var f: File{; buf: PByte})

Вопросы по этому участку кода:
1)Почему фу-я принимает 4 параметра, а не 2(push ss выглядит вообще как-то странно)
2)buf: PByte (необязательный параметр?, но как я понял, здесь используемый) это что вообще? Адрес для буфера куда положить считанный данные или что?
3)Куда должен вернуться результат и что это собственно за результат будет?
И еще один вопрос? чем ее можно отлаживать? В turbodebagger'e пишет, что это не win-32 рограмма, а деглюкер пишет что у меня запущен V86. Ни о чем этом понятия не имею, просто раньше отлаживал только виндоуз программы



Ранг: 45.7 (посетитель)
Активность: 0.050
Статус: Участник
EBFE

Создано: 02 октября 2005 17:43
· Личное сообщение · #2

в dos'е понимаешь указатели из-за модели памыти были вынуждены еже и сегмент содержать (например ds:si или es:di)
вероятнее всего буфер для процедуры находится в стеке, поэтому и push ss
что и куда возвращается смотри в отладчике ;)
есть турбодебаггер для доса (td.exe)



Ранг: 186.8 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 03 октября 2005 01:58
· Личное сообщение · #3

dMNt, скажешь тоже. Турбодебаггером тока "hello world" можно отлаживать.
jungle, возьми AFD, например. А я бы отлаживал айсом.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 03:27
· Личное сообщение · #4

с ss понятно.я так примерно и думал...
AFD не работает с этой программной, ибо пишет too big size или что-то вроде этого...
а softice'ом ее можно?



Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 03 октября 2005 03:31
· Личное сообщение · #5

jungle
конечно можно! там даже лоадер свой есть w???16.exe не помню название
бряки так же можно ставить
bpint 21 if (al==09)

-----
Подписи - ЗЛО! Нужно убирать!




Ранг: 51.9 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 03 октября 2005 07:22
· Личное сообщение · #6

На этом сайте в разделе скачать есть такое:

Данный отладчик позволяет исследовать DOS .com, DOS .exe, приложения DOS, работающие в защищенном режиме, 16-разрядные NE, 32-разрядные PE программы. Имеется возможность установки нескольких контрольных точек. В TRW использовано много новых идей по трассировке программ под Windows 95. После SoftICE, TRW - лучший отладчик для Windows, но к сожалению не под XP/NT/2k.

clabz.com/new/trw2000.rar

Попробуй его. Правда он под Win95/98.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 08:53
· Личное сообщение · #7

я его уж тоже пробовал, под 98, что-то он разругался.Не помню уже на что.Но все равно спасибо.
Короче софтайсом dldr.exe его дебагю...



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 10:26
· Личное сообщение · #8

Все-таки не могу понять, как работает эта функция read, про которуя я написал.Отладив, я увидел, что она меняет ax, edi и много другого, хотя по адресу предпологаемого буффера(di) никаких изменений не заметно



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 03 октября 2005 10:49 · Поправил: xShadow
· Личное сообщение · #9

Int21h - Dos Interrupts
На входе: AH 3fH
BX file handle
CX number of bytes to read
DS: DX address of buffer to receive data
На выходе: AX error code if CF is set to CY
if no error, AX=number of bytes actually read

Info: Reads CX bytes of data (or fewer) from the file or device with
handle number BX. The data is read from the current position of
the file's read/write pointer and is placed into the caller's
buffer pointed to by DS: DX.

This updates the file's read/write pointer to set up for a
subsequent sequential-access read or write. To access a specific
part of a file, use Fn 42H (Lseek) before this call.

Notes: ■ You should always compare the return value of AX (number of
bytes read) to CX (number of bytes requested):

 if AX = CX, (and CF=NC) the read was correct with no error
 if AX = 0, the end of the file (EOF) was reached
 if AX < CX (but not zero):
if reading from a device, the input line is AX bytes long
if reading from a file, the call has read up to the EOF

■ It is handy to use this function for reading default handles
such as the Standard I/O handles, instead of the buffered input
or character-by-character input functions.

■ When you read from a device, AX returns the length of the line
up to and including the terminating CR (ASCII 13H).



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 03 октября 2005 10:52 · Поправил: xShadow
· Личное сообщение · #10

Работа с файлами в паскакале организована через прерывание 21h от Dos'a. Если конечно не изобретали велосипед.

Вот так это всё в исходнике от Tp7

ReadFile:

	MOV	AH,dosRead ;3fh
	MOV	DX,100
	JMP	SHORT InOutFile
;cut...

InOutFile:

	ARG	FileP,DWORD,1
	ARG	BufferP,DWORD,1

	ENTRY	FAR
	LES	DI,FileP
	CALL	OpenCheck
	JNE	@@2
	PUSH	DS
	PUSH	DX
	LDS	DX,BufferP
	MOV	CX,ES:[DI].fBufSize
	MOV	BX,ES:[DI].fHandle
	INT	DOS ;21h
	POP	DX
	POP	DS
	JC	@@1
	CMP	AX,CX
	JE	@@2
	MOV	AX,DX
@@1:	MOV	InOutRes,AX
@@2:	EXIT	4




Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 12:00 · Поправил: jungle
· Личное сообщение · #11

АГА.Начинает проясняться... Я просто внутрь call @Read$qm4Filem3Any ; Read(var f: File{; buf: PByte}) не смотрел ... Теперь вижу, что считываются данные
А где можно такие справки по другим функциям найти?
И где ты взял как в tp7 все это организовано?



Ранг: 34.6 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 03 октября 2005 14:12
· Личное сообщение · #12

А чего добиться то надо?
И с дебугером для ДОС - не надо так! Тоже хорош. Я им прогу ломал. Получилось. Все, я думаю, зависит от поставленных задач.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 15:50
· Личное сообщение · #13

Короче задача передо мной стоит жуткая, не знаю, получиться или нет ее решить
Дали мне экзешник, скомпилированный tp7. Весит она всего 12кб. Она какие-то данные читает из файла и что-то выводит. Попросили сделать исходник на tp, который ведет себя также, как и экзе Кто-нить такие вещи вообще делал когда-нибудь? Я вот вообще пока не знаю, получится или нет...



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 03 октября 2005 15:58
· Личное сообщение · #14

jungle пишет:
Короче задача передо мной стоит жуткая, не знаю, получиться или нет ее решить
Дали мне экзешник, скомпилированный tp7. Весит она всего 12кб. Она какие-то данные читает из файла и что-то выводит. Попросили сделать исходник на tp, который ведет себя также, как и экзе Кто-нить такие вещи вообще делал когда-нибудь? Я вот вообще пока не знаю, получится или нет...


Ну это смотря что читает и особенно что выводит, если алгоритм не очень сложный, думаю можно легко сделать. Запости тут эти 12 кб, посмотрим.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 16:40 · Поправил: jungle
· Личное сообщение · #15

В принципе прога вроде не особо мудреная... Я пока постить не буду, мне ее научник мой дал, она вроде по кластерному анализу или хз чему, мож он не захочет, чтобы я ее постил. Спрошу у него, даст добро, запощу(ну, понимаете)
Так вот, меня интересует все же <<
А где можно такие справки по другим функциям найти?
И где ты взял как в tp7 все это организовано?
а то у меня в иде теперь такой от нее коммент:
seg000:0148                 call    @$brmin$q4Realt1 ; Real(AX:BXX)-=Real(CX:SII)

и еще чуть ниже
seg000:015B                 call    @$brdiv$q4Realt1 ; Real(AX:BXX)/=Real(CX:SII)
seg000:015B                                         ; Real(CX:SII)=Real(AX:BXX)%Real(CX:SII)

я так понимаю, если обозначить Real(AX:BXX)=А, а Real(CX:SII)=Б то это будет соответственно:
А=А-Б
и
А=А/Б;Б=А%Б
???
Только вот как в таком виде(в 3 регистрах) хранится число? Просто хочется вопроще обойтись, раз ида такие комменты выдает, в сами функции неохота залазить



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2005 16:43
· Личное сообщение · #16

короче вместо этой штуки должно быть :d



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 04 октября 2005 00:36
· Личное сообщение · #17

Как устроено в TP7 знаю потому что на компе есть все исходники: system и т.д.
Справку по IO DOS'a можно легко найти в нете или вот ссылка anjin.narod.ru/teach60.rar
khpi-iip.mipk.kharkiv.edu/library/sp/index.html
Вот тут про паскаль
koapp.narod.ru/tehlit/programmer/pascal/catalog.htm



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 октября 2005 07:52
· Личное сообщение · #18

короче вот программулька
если кто чем поможет буду рад.
2xShadow где эти исходники в инете взять не подскажешь???

4f6b_CLN.EXE



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 октября 2005 08:00
· Личное сообщение · #19

кстатьи такой еще вопрос:Почему то, что в IDA:
seg000:0010 word_10         dw 449Ah                ; DATA XREF: 00001714r
seg000:0012 ; ---------------------------------------------------------------------- -----
seg000:0012
seg000:0012 loc_12:                                 ; DATA XREF: 0000171Br
seg000:0012                 add     ah, [bp+si+1]

в отладчике вызов функции?Почему ида не смогла правильно дизассемблировать?



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2005 08:28
· Личное сообщение · #20

jungle пишет:
правильно дизассемблировать?

Выдели этот кусок и ещё раз проанализируй.
У меня получилось примерно следующее.

seg000:0010
seg000:0010 loc_10:                                 ; DATA XREF: Halt(Word)+1Cr
seg000:0010                                         ; Halt(Word)+23r
seg000:0010                 call    @__StackCheck$q4Word ; Stack overflow check (AX)
seg000:0015                 sub     sp, 3F8h




Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 октября 2005 08:42
· Личное сообщение · #21

ага, получилось...



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2005 09:03
· Личное сообщение · #22

jungle пишет:
где эти исходники в инете взять


Где их сейчас искать не знаю, мне проще выложить их.
Полный комплект. Borland Pascal 7.0
Упакован 7-Zip.

webfile.ru/559947

Имя файла: BP.7z
Размер: 9161 кбайт
Номер файла: 559947
Доступен до: 14.10.2005 17:59


 eXeL@B —› Основной форум —› Диззасемблирование проги TurboPascal
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати