Сейчас на форуме: 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 ![]() ![]() А=А-Б и А=А/Б;Б=А%Б ??? Только вот как в таком виде(в 3 регистрах) хранится число? Просто хочется вопроще обойтись, раз ида такие комменты выдает, в сами функции неохота залазить ![]() ![]() |
|
Создано: 03 октября 2005 16:43 · Личное сообщение · #16 |
|
Создано: 04 октября 2005 00:36 · Личное сообщение · #17 |
|
Создано: 07 октября 2005 07:52 · Личное сообщение · #18 короче вот программулька если кто чем поможет буду рад. 2xShadow где эти исходники в инете взять не подскажешь??? ![]() ![]() |
|
Создано: 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 |