1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Кодерский уголок

Тема в разделе "Мастерская", создана пользователем Dimouse, 10 сен 2006.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    35.133
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

    Что здесь не допускается:
    - беспорядочный флуд на всевозможные темы, в том числе общие обсуждения языков программирования без конкретики (карается по статье "флуд и оффтопик" *),
    - разжигания на темы "что лучше, Си или Си++ и чем они отличаются?", "какой язык программирования лучше X или Y?" и т.п. (карается по статье "флейм и участие в холиварах" *),
    - мерение пиписьками в стиле "я лучше программирую" или "ты не умеешь программировать" (карается по статье "оскорбление участников и их взглядов" *).

    Всё это допускается в специально созданной теме "Беседка для программистов или «Бутерброд с кодом».

    * по усмотрению модератора также возможно применение блокировки в данной теме.

    Оригинальное сообщение
     
    Последнее редактирование модератором: 24 ноя 2014
    CY8R4Y нравится это.
  2.  
  3. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    ^_ZY[X
     
  4. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Да, это не так впечатляет.
     
  5. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    ищо как впечатляет, если ты знаешь, что такое Каомодзи. :)
     
  6. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Код:
    NewHeaderStruc  struc
    NewID                   db '3P'         ;identifier.
    NewSize                 dd 0            ;byte size of 3P section of file.
    NewLength               dd 0            ;byte size of exe image data.
    NewAlloc                dd 0            ;byte size of program.
    NewSegments             dw 0            ;number of segment definitions.
    NewRelocs               dd 0            ;number of relocation table entries.
    NewEntryEIP             dd 0            ;entry offset.
    NewEntryCS              dw 0            ;segment list entry number for entry CS.
    NewEntryESP             dd 0            ;ESP offset.
    NewEntrySS              dw 0            ;segment list entry number for SS.
    NewFlags                dd 0            ;Control flags.
    NewAutoStack            dd 0            ;Auto stack size.
    NewAutoDS               dw 0            ;Auto DS segment number +1
    NewExports              dd 0            ;Length of EXPORT section.
    NewImports              dd 0            ;Length of IMPORT section.
    NewImportModCnt         dd 0            ;Number of IMPORT modules.
    NewReserved             db 64-NewReserved dup (?)
    NewHeaderStruc  ends
    
    Что означает запись: db 64-NewReserved dup(?)
     
  7. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Добивает общий размер структуры до 64.

    NewReserved - смещение поля NewReserved внутри структуры.
     
    Bato-San, Geryon и Val07og нравится это.
  8. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Помогите понять, как устроены драйверы DIGPAK & MIDPAK в игре Rapid Assault. Они являются двоичными файлами 3P (Causeway). Я написал анализатор заголовка 3P на базе исходного кода le23p, но куда дальше копать - не понимаю.

    В архиве - анализатор 3P и два самых простых драйвера - 0none.sdv и 0none.mdv. Это драйвера-заглушки для псевдоустройств No sound и No music. Во втором из них есть даже сигнатуры MThd и MTrk, видимо, относящиеся к какой-то функции проигрывания файлов MID.

    IDA Pro Free их открывать не хочет, CWD - открывает, но на первых же шагах вылетает exception - видимо, он не понимает, где данные, а где код. Что можно сделать?

    P.S. Вот единственный исходник из игры:

    Код:
    
    
    	.386
    	.model small
    	option oldstructs
    
    	include d:\cw\cw.inc
    	include d:\cw\cw-undoc.inc
    
    	include mdv.inc
    
    b	equ	byte ptr
    w	equ	word ptr
    d	equ	dword ptr
    f	equ	fword ptr
    
    
    	.code
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Load and initialise DigPak and MidPak drivers.
    ;
    ;On Entry:
    ;
    ;nothing.
    ;
    ;On Exit:
    ;
    ;Carry set on error and AX=error code.
    ;
    ;Error codes:
    ;
    ;0	- no error.
    ;1	- file not found.
    ;2	- not enough memory.
    ;3	- corrupt driver file.
    ;
    ;Note:
    ;
    ;All of the other routines can be called after this routine has failed to
    ;initialise the drivers. This code sets a flag which is checked by the other
    ;routines which will simply exit without doing anything if the drivers arn't
    ;loaded.
    ;
    InitDigMid	proc	near
    	public InitDigMid
    	cmp	HaveDigMid,0		;Check if we already loaded the
    	jnz	@@8		;drivers.
    ;
    ;Load the relavent driver files.
    ;
    	sys	cwGetPatch
    	cmp	d[edx+4],0
    	jz	@@GetDig
    	mov	edx,[edx+4]
    	mov	sDriverAddr,edx
    	jmp	@@GotDig
    @@GetDig:	;
    	mov	edx,offset DigName	;DigPak selected driver name,
    	sys	cwLoad
    	jc	@@9
    	mov	sDriverAddr,edx
    	mov	w[sDriverAddr+4],si
    	mov	edi,sDriverAddr
    	call	MDV_Init[edi]	;Call init code.
    	jc	@@9		;oops, some kind of problem.
    @@GotDig:	;
    	sys	cwGetPatch
    	cmp	d[edx],0
    	jz	@@GetMid
    	mov	edx,[edx]
    	mov	mDriverAddr,edx
    	jmp	@@GotMid
    @@GetMid:	;
    	mov	edx,offset MidName	;MidPak selected driver name.
    	sys	cwLoad
    	jc	@@9
    	mov	mDriverAddr,edx
    	mov	w[mDriverAddr+4],si
    	mov	edi,mDriverAddr
    	mov	eax,50
    	call	MDV_Init[edi]	;Call init code.
    	jc	@@9		;oops, some kind of problem.
    @@GotMid:	;
    @@8:	mov	HaveDigMid,1		;flag driver present.
    	xor	ax,ax
    	ret
    	;
    @@9:	push	ax		;save error code.
    	call	RemDigMid		;Remove everything on error.
    	pop	ax
    	stc
    	ret
    InitDigMid	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Remove DigPak and MidPak drivers.
    ;
    RemDigMid	proc	near
    	public RemDigMid
    ;
    ;Make sure no Midi stuff playing.
    ;
    	call	StopDigi
    	call	StopMidi
    	call	RemDigiFile
    	call	RemMidiFile
    ;
    ;Need to de-init MidPak if it was initialised.
    ;
    	cmp	w[mDriverAddr+4],0	;Did we make the init call?
    	jz	@@0
    	mov	edi,mDriverAddr
    	call	MDV_Rem[edi]		;Call remove code.
    	xor	bx,bx
    	xchg	bx,w[mDriverAddr+4]
    	sys	RelMem
    ;
    ;Now release memory allocated for all MidPak chunks.
    ;
    @@0:	xor	bx,bx
    	xchg	bx,MidiFileSeg
    	or	bx,bx
    	jz	@@3
    	sys	RelMem
    ;
    ;Need to de-init DigPak if it was initialised.
    ;
    @@3:	cmp	w[sDriverAddr+4],0	;Did we make the init call?
    	jz	@@4
    	mov	edi,sDriverAddr
    	call	MDV_Rem[edi]		;Call remove code.
    	xor	bx,bx
    	xchg	bx,w[sDriverAddr+4]
    	sys	RelMem
    	;
    @@4:	mov	HaveDigMid,0
    	ret
    RemDigMid	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Load and register a midi file.
    ;
    ;On Entry:
    ;
    ;DS:DX	- file name.
    ;
    ;On Exit:
    ;
    ;Carry set on error and AX=error code else,
    ;
    ;nothing.
    ;
    ;Error Codes:
    ;
    ;0	- no error.
    ;1	- file not found.
    ;2	- not enough memory.
    ;3	- MidPak driver not loaded.
    ;
    InitMidiFile	proc	near
    	public InitMidiFile
    	mov	ax,3
    	cmp	HaveDigMid,1		;check drivers are loaded.
    	jc	@@9
    	;
    	call	RemMidiFile		;lose anything already loaded.
    	call	LoadAllocate		;load requested file.
    	jc	@@9
    	mov	MidiFileSeg,dx	;stow this for release.
    	or	MIDIUsed,-1
    	;
    	xor	ax,ax
    @@9:	ret
    InitMidiFile	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Load and register a digi file.
    ;
    ;On Entry:
    ;
    ;DS:DX	- file name.
    ;
    ;On Exit:
    ;
    ;Carry set on error and AX=error code else,
    ;
    ;nothing.
    ;
    ;Error Codes:
    ;
    ;0	- no error.
    ;1	- file not found.
    ;2	- not enough memory.
    ;3	- DigPak driver not loaded.
    ;
    InitDigiFile	proc	near
    	public InitDigiFile
    	mov	ax,3
    	cmp	HaveDigMid,1		;check drivers are loaded.
    	jc	@@9
    	;
    	call	RemDigiFile
    	call	LoadAllocate		;load requested file.
    	jc	@@9
    	mov	DigiFileSeg,dx	;stow this for release.
    	;
    	xor	ax,ax
    @@9:	ret
    InitDigiFile	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Make sure no midi stuff is playing and release memory used by current file.
    ;
    RemMidiFile	proc	near
    	public RemMidiFile
    	pushad
    	xor	bx,bx
    	xchg	bx,MidiFileSeg	;check if a previous allocation
    	or	bx,bx		;needs releaseing.
    	jz	@@0
    	call	StopMidi
    	sys	RelMem		;release memory.
    @@0:	popad
    	ret
    RemMidiFile	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Make sure no digi stuff is playing and release memory used by current file.
    ;
    RemDigiFile	proc	near
    	public RemDigiFile
    	pushad
    	xor	dx,dx
    	xchg	dx,DigiFileSeg
    	or	dx,dx
    	jz	@@0
    	call	StopDigi
    	mov	bx,dx
    	sys	RelMem
    @@0:	popad
    	ret
    RemDigiFile	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Start X-Midi sequence playing.
    ;
    ;On Entry:
    ;
    ;AX	- Sequence number.
    ;
    PlayMidi	proc	near
    	public PlayMidi
    	cmp	HaveDigMid,1
    	jc	@@9
    	or	MIDIUsed,-1
    	call	StopMidi
    	push	eax
    	push	esi
    	push	edx
    	push	ecx
    	push	ebx
    	mov	bx,MidiFileSeg
    	sys	GetSelDet32
    	mov	esi,edx
    	pop	ebx
    	pop	ecx
    	pop	edx
    	mov	eax,1
    	mov	edi,mDriverAddr
    	call	MDV_Play[edi]	;Play tune.
    	pop	esi
    	pop	eax
    	clc
    @@9:	ret
    PlayMidi	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Update Midi player.
    ;
    UpdateMidi	proc	near
    	public UpdateMidi
    	cmp	HaveDigMid,1
    	jc	@@9
    	push	edi
    	mov	edi,mDriverAddr
    	call	MDV_Update[edi]	;Update tune.
    	pop	edi
    @@9:	ret
    UpdateMidi	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Start a digi sample playing.
    ;
    ;On Entry:
    ;
    ;AX	- Sample number.
    ;
    PlayDigi	proc	near
    	public PlayDigi
    	pushad
    	cmp	HaveDigMid,1
    	jc	@@9
    	;
    	movzx	edi,ax
    	shl	edi,2
    	add	edi,4
    	;
    	push	es
    	mov	es,DigiFileSeg
    	mov	esi,es:[edi]
    	mov	ecx,es:[edi]
    	and	ecx,0FFFFFFh
    	sub	ecx,2
    	add	esi,5
    	push	eax
    	push	ebx
    	push	ecx
    	push	edx
    	mov	bx,es
    	sys	GetSelDet32
    	add	esi,edx
    	pop	edx
    	pop	ecx
    	pop	ebx
    	pop	eax
    	mov	edi,sDriverAddr
    	call	MDV_Play[edi]	;Play sample.
    	pop	es
    	;
    @@9:	popad
    @@return:	ret
    PlayDigi	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Stop any midi sounds that are playing.
    ;
    StopMidi	proc	near
    	public StopMidi
    	cmp	HaveDigMid,1
    	jc	@@9
    	cmp	MIDIUsed,0
    	jz	@@9
    	push	edi
    	mov	edi,mDriverAddr
    	call	MDV_Stop[edi]	;Update tune.
    	pop	edi
    @@9:	ret
    StopMidi	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Stop any digi sounds that are playing.
    ;
    StopDigi	proc	near
    	public StopDigi
    	cmp	HaveDigMid,1
    	jc	@@9
    	push	edi
    	mov	edi,sDriverAddr
    	call	MDV_Stop[edi]	;Update tune.
    	pop	edi
    @@9:	ret
    StopDigi	endp
    
    
    ;-------------------------------------------------------------------------------
    ;
    ;Allocate memory for, and load, specified file.
    ;
    ;On Entry:
    ;
    ;DS:DX	- File name.
    ;
    ;On Exit:
    ;
    ;Carry set on error and AX=error code else,
    ;
    ;DX	- Selector for memory file loaded to.
    ;SI	- low word length.
    ;DI	- high word length.
    ;
    ;Error codes:
    ;
    ;0	- no error.
    ;1	- file not found.
    ;2	- not enough memory.
    ;
    ;All other registers preserved.
    ;
    LoadAllocate	proc	near
    	mov	ax,3d00h
    	int	21h
    	mov	bx,ax
    	jc	@@10
    	xor	cx,cx
    	xor	dx,dx
    	mov	ax,4202h
    	int	21h
    	shl	edx,16
    	mov	dx,ax
    	push	edx
    	xor	cx,cx
    	xor	dx,dx
    	mov	ax,4200h
    	int	21h
    	pop	ecx
    	push	bx
    	sys	GetMem32
    	mov	ax,bx
    	pop	bx
    	jc	@@9
    	push	ax
    	push	ds
    	mov	ds,ax
    	xor	edx,edx
    @@read:	or	cx,-1
    	mov	ah,3fh		;Read the driver into memory.
    	int	21h
    	jc	@@readover
    	movzx	eax,ax
    	add	edx,eax
    	or	eax,eax
    	jnz	@@read
    	clc
    @@readover:	pop	ds
    	pop	dx
    	jc	@@9
    	push	dx
    	mov	ah,3eh		;close the file.
    	int	21h
    	pop	dx
    	clc
    	ret
    	;
    @@9:	mov	ah,3eh		;close the file.
    	int	21h
    @@10:	stc
    	ret
    LoadAllocate	endp
    
    
    	.data
    
    	public HaveDigMid, sDriverAddr, mDriverAddr, MIDIUsed
    
    HaveDigMid	db 0
    ;
    sDriverAddr	dd 0,0
    DigiFileSeg	dw 0
    DigName	db "SOUND\SAMPLE.DRV",0
    ;
    mDriverAddr	dd 0,0
    MidiFileSeg	dw 0
    MidName	db "SOUND\MIDI.DRV",0
    ;
    MIDIUsed	db 0
    
    	end
    
     

    Вложения:

    • 3pinfo.zip
      Размер файла:
      57,4 КБ
      Просмотров:
      29
    Последнее редактирование: 26 май 2014
  9. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    И что означает код:

    Код:
        mov	edi,mDriverAddr
        call MDV_Play[edi]
    
    Что-то вроде перехода по смещению относительно начала драйвера?
     
  10. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Перейти по mDriverAddr + MDV_Play. Вероятно, адрес процедуры внутри драйвера фиксированный. А где mdv.inc?
     
  11. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Были бы mdv.inc и cw-undoc.inc - я бы постарался сам разобраться, но вот есть только digmid.asm, видимо, случайно забытый разработчиками в дистрибутиве игры. cw.inc есть в дистрибутивах Open Watcom и Causeway Extender.

    Но ведь драйверы имеют разный размер:

    d73ee101e113f8c183412a6ec4c1bff4.png

    Возможно, в начале каждого драйвера есть что-то вроде таблицы адресов стандартных процедур?
     

    Вложения:

    • cw_inc.zip
      Размер файла:
      6,1 КБ
      Просмотров:
      29
    Последнее редактирование: 26 май 2014
  12. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    по смещению. не обязательно именно в начале. это нормальная практика. Обычный CASE.
     
  13. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Практически наверняка. MDV_Play вполне может быть переменной.

    Без исходников это, разумеется, небыстрое дело.

    Открывайте 0NONE.MDV в IDA, выбирайте 32-битный код. Файл начинается с известной вам структуры, которая подробно прокомментирована в STRUCS.INC.

    Код:
    NewHeaderStruc  struc
    NewID           db '3P' ;identifier.
    NewSize         dd 0            ;byte size of 3P section of file.
    NewLength               dd 0            ;byte size of exe image data.
    NewAlloc                dd 0            ;byte size of program.
    NewSegments             dw 0            ;number of segment definitions.
    NewRelocs               dd 0            ;number of relocation table entries.
    NewEntryEIP             dd 0            ;entry offset.
    NewEntryCS              dw 0            ;segment list entry number for entry CS.
    NewEntryESP             dd 0            ;ESP offset.
    NewEntrySS              dw 0            ;segment list entry number for SS.
    NewFlags                dd 0            ;Control flags.
    NewAutoStack            dd 0            ;Auto stack size.
    NewAutoDS               dw 0            ;Auto DS segment number +1
    NewExports              dd 0            ;Length of EXPORT section.
    NewImports              dd 0            ;Length of IMPORT section.
    NewImportModCnt dd 0            ;Number of IMPORT modules.
    NewReserved             db 10 DUP (?)
    NewHeaderStruc  ends
    ;
    Первая процедура начинается по адресу 0x27a, вторая - 0x27dh и т.д. Кнопкой 'C' отмечайте код.

    Код:
    seg000:00000210 aNoMusicDriver  db 'No music driver',0
    seg000:00000220 aSelectThisDriv db 'Select this driver if  you do not have a',0Dh,0Ah
    seg000:00000220                 db 'sound  card  or  cannot find  it  listed',0Dh,0Ah
    seg000:00000220                 db 'here.',0
    seg000:0000027A ; ---------------------------------------------------------------------------
    seg000:0000027A                 xor     eax, eax
    seg000:0000027C                 retn
    seg000:0000027D ; ---------------------------------------------------------------------------
    seg000:0000027D                 pusha
    seg000:0000027E                 call    sub_4B8
    seg000:00000283                 mov     esi, 0
    seg000:00000288                 mov     ecx, 0FD8h
    seg000:0000028D                 sub     ecx, esi
    seg000:0000028F                 mov     ax, 0FF1Ch
    seg000:00000293                 int     31h             ; DPMI Services   ax=func xxxxh
    seg000:00000293                                         ;
    seg000:00000295                 mov     ds:dword_5E0, 5ECh
    seg000:0000029F                 jb      short loc_2BA
    seg000:000002A1                 mov     ax, 0FFFAh
    seg000:000002A5                 int     31h             ; DPMI Services   ax=func xxxxh
    seg000:000002A5                                         ;
    seg000:000002A7                 mov     dword ptr [edx], 0
    seg000:000002AD                 mov     ds:dword_5E0, 0
    seg000:000002B7                 clc
    seg000:000002B8                 jmp     short loc_2C0
    seg000:000002BA ; ---------------------------------------------------------------------------
    seg000:000002BA
    seg000:000002BA loc_2BA:                                ; CODE XREF: seg000:0000029Fj
    seg000:000002BA                 call    sub_2C7
    seg000:000002BF                 stc
    seg000:000002C0
    seg000:000002C0 loc_2C0:                                ; CODE XREF: seg000:000002B8j
    seg000:000002C0                 popa
    seg000:000002C1                 mov     eax, ds:dword_5E0
    seg000:000002C6                 retn
    seg000:000002C7
    seg000:000002C7 ; =============== S U B R O U T I N E =======================================
    seg000:000002C7
    seg000:000002C7
    seg000:000002C7 sub_2C7         proc near               ; CODE XREF: seg000:loc_2BAp
    seg000:000002C7                 pusha
    seg000:000002C8                 call    sub_30C
    seg000:000002CD                 mov     ax, 0FFFAh
    seg000:000002D1                 int     31h             ; DPMI Services   ax=func xxxxh
    Когда большая часть процедур будет отмечена, можно попытаться определить в заголовке смещения. Там есть похожая последовательность, начиная со смещения 0x58, но нужно смотреть.

    Пробуйте. Без исходников, конечно, тяжко.
     
    Последнее редактирование: 26 май 2014
    Val07og, AxXxB и Geryon нравится это.
  14. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    А что за IDA должен быть, чтобы это открывал? У меня бесплатная версия, там только такие форматы:

    6af09d7b3507cb1ca2d9943b92a78390.png
     
  15. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    :) Так нету там формата, в том-то и дело. Вам его и разбирать. Открывать нужно как обыкновенный бинарник с 32-битным кодом. И размечать вручную. Первой идёт ваша структура. Структуры в IDA создавать умеете? Создайте и примените или просто ручками обозначьте типы кнопкой 'D'.

    Потом перемещайтесь к тем смещениями, что я указывал и обозначайте код кнопкой 'C'. Процедура за процедурой.
     
    Val07og, Geryon и Bato-San нравится это.
  16. AxXxB неадекват

    AxXxB

    Хелпер Переводчик

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.663
    Открываешь IDA, нажимаешь GO, потом File > Open. После открытия файла IDA определит его как Binary - жмем ОК - потом спросит, дизассемблировать ли в 32-битном режиме - жмем Yes.
     
    A.P.$lasH и Val07og нравится это.
  17. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Код:
    seg000:0000037E                 push    es
    seg000:0000037F                 db      66h
    seg000:0000037F                 mov     es, bx
    seg000:00000382                 mov     ebx, es:[ecx+4]
    seg000:00000386                 mov     ecx, es:[ecx]
    seg000:00000389                 pop     es
    seg000:0000038A                 push    ds
    seg000:0000038B                 push    es
    seg000:0000038C                 push    ax
    seg000:0000038E                 mov     ax, 1
    seg000:00000392                 db      66h
    seg000:00000392                 mov     ds, ax
    seg000:00000395                 assume ds:seg000
    seg000:00000395                 db      66h
    seg000:00000395                 mov     es, ax
    seg000:00000398                 assume es:seg000
    seg000:00000398                 pop     ax
    seg000:0000039A                 call    sub_27D
    seg000:0000039F                 pop     es
    seg000:000003A0                 assume es:nothing
    seg000:000003A0                 pop     ds
    seg000:000003A1                 assume ds:nothing
    
    Может ли быть такое, что прямо посреди кода какие-то 'db 66h'?
     
  18. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Это префикс переопределения размера.

    Код:
       8E C3 - mov es, ebx
    66 8E C3 - mov es, bx
    http://citforum.ru/book/cook/intel.shtml
     
    Bato-San, Geryon и Val07og нравится это.
  19. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.446
    Программирование распознавателей системы

    Подскажите кто-нибудь знает есть ли расширенные функции в C# определяющие операционную систему, различающую клиентскую от серверной и 32-битную от 64-битной?
     
  20. Eraser Чистильщик

    Eraser

    Хелпер

    Регистрация:
    29 дек 2001
    Сообщения:
    10.369
    netsky2004 нравится это.
  21. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Программист на C#, не знающий об MSDN… Ну тогда и я не знаю.
     
    Guyver, GarfieldTheCat, Eraser и ещё 1-му нравится это.
  22. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.446
    MisterGrim, а я пока учусь, версии моих программ будут обновляться
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление