| Сейчас на форуме: user99, _MBK_, ManHunter, Magister Yoda (+8 невидимых) | 
| eXeL@B —› Основной форум —› Диззасемблирование проги TurboPascal | 
| Посл.ответ | Сообщение | 
| 
 | 
Создано: 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. Ни о чем этом понятия не имею, просто раньше отлаживал только виндоуз программы ![]()  | 
| 
 | 
Создано: 02 октября 2005 17:43  · Личное сообщение · #2  | 
| 
 | 
Создано: 03 октября 2005 01:58  · Личное сообщение · #3  | 
| 
 | 
Создано: 03 октября 2005 03:27  · Личное сообщение · #4  | 
| 
 | 
Создано: 03 октября 2005 03:31  · Личное сообщение · #5  | 
| 
 | 
Создано: 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. ![]()  | 
| 
 | 
Создано: 03 октября 2005 08:53  · Личное сообщение · #7  | 
| 
 | 
Создано: 03 октября 2005 10:26  · Личное сообщение · #8  | 
| 
 | 
Создано: 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). ![]()  | 
| 
 | 
Создано: 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
![]()  | 
| 
 | 
Создано: 03 октября 2005 12:00 · Поправил: jungle  · Личное сообщение · #11  | 
| 
 | 
Создано: 03 октября 2005 14:12  · Личное сообщение · #12  | 
| 
 | 
Создано: 03 октября 2005 15:50  · Личное сообщение · #13 Короче задача передо мной стоит жуткая, не знаю, получиться или нет ее решить  
Дали мне экзешник, скомпилированный tp7. Весит она всего 12кб. Она какие-то данные читает из файла и что-то выводит. Попросили сделать исходник на tp, который ведет себя также, как и экзе   Кто-нить такие вещи вообще делал когда-нибудь? Я вот вообще пока не знаю, получится или нет...
![]()  | 
| 
 | 
Создано: 03 октября 2005 15:58  · Личное сообщение · #14 jungle пишет: Короче задача передо мной стоит жуткая, не знаю, получиться или нет ее решить Дали мне экзешник, скомпилированный tp7. Весит она всего 12кб. Она какие-то данные читает из файла и что-то выводит. Попросили сделать исходник на tp, который ведет себя также, как и экзе Кто-нить такие вещи вообще делал когда-нибудь? Я вот вообще пока не знаю, получится или нет... Ну это смотря что читает и особенно что выводит, если алгоритм не очень сложный, думаю можно легко сделать. Запости тут эти 12 кб, посмотрим. ![]()  | 
| 
 | 
Создано: 03 октября 2005 16:40 · Поправил: jungle  · Личное сообщение · #15 В принципе прога вроде не особо мудреная... Я пока постить не буду, мне ее научник мой дал, она вроде по кластерному анализу или хз чему, мож он не захочет, чтобы я ее постил. Спрошу у него, даст добро, запощу(ну, понимаете) Так вот, меня интересует все же << А где можно такие справки по другим функциям найти? И где ты взял как в tp7 все это организовано? а то у меня в иде теперь такой от нее коммент: seg000:0148 call @$brmin$q4Realt1 ; Real(AX:BX и еще чуть ниже seg000:015B call @$brdiv$q4Realt1 ; Real(AX:BX я так понимаю, если обозначить Real(AX:BX  X)=А, а Real(CX:SI I)=Б то это будет соответственно:
А=А-Б и А=А/Б;Б=А%Б ??? Только вот как в таком виде(в 3 регистрах) хранится число? Просто хочется вопроще обойтись, раз ида такие комменты выдает, в сами функции неохота залазить  
![]()  | 
| 
 | 
Создано: 03 октября 2005 16:43  · Личное сообщение · #16  | 
| 
 | 
Создано: 04 октября 2005 00:36  · Личное сообщение · #17  | 
| 
 | 
Создано: 07 октября 2005 07:52  · Личное сообщение · #18 короче вот программулька если кто чем поможет буду рад. 2xShadow где эти исходники в инете взять не подскажешь???   4f6b_CLN.EXE
![]()  | 
| 
 | 
Создано: 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] в отладчике вызов функции?Почему ида не смогла правильно дизассемблировать? ![]()  | 
| 
 | 
Создано: 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 ![]()  | 
| 
 | 
Создано: 07 октября 2005 08:42  · Личное сообщение · #21  | 
| 
 | 
Создано: 07 октября 2005 09:03  · Личное сообщение · #22  | 
| eXeL@B —› Основной форум —› Диззасемблирование проги TurboPascal | 






 Кто-нить такие вещи вообще делал когда-нибудь? Я вот вообще пока не знаю, получится или нет...

X)-=Real(CX:SI
 
 Для печати