SIPU.COM, PROGTOOL, can display and modyify image headers im hexadecimal form SIPU Version 0.5 Author: Adam Maulis ( maulis@ludens.elte.hu ) Copyright: GNU General Public License 2. User's guidelet: SIPU.TXT (or aaareadme.txt) With this program you can display any image (.exe) files in hexadecimal form. You also can modify any bits in this. More features: octal and decimal input, variable bits or quadworld input, user defineable symbols. symbols from sys$share:*.req Usage: $ @SIPU exename You must read and write access for that image. After you invoked this command SIPU displays its prompt and waits your command. SIPU> Commands: quit without save QUIT quit without save WRITE save current block and read next BASE
base address for manipulations via symbol SHOW quick short for dcl's SHOW SYMBOL HELP short (23 lines) message DCL execute dcl commands. For example: DCL SPAWN or DCL MYADDRESS="%x10,0,%x20,0" LOAD search for from bliss' .req files. For example: If you want define all EIHD$ symbols or smilar. Special commands: redisplay current record in hexadecimal form 'address' [new value] simple numeric value. When you not specify new value it examines this location and prompts for new value. When you simpy press return then no values will have been changed. Accepted: integer or known symbol. 32 bits only. 'symbol' Known address symbol. (see SHOW command) Examine this location and prompt for new value. Symbols: "start byte, start bit, len, reserved" Accepted: integer or known symbol. 1..32 or 64 bits. Detailed examples 0, How does 'LOAD' work? 1, You want change the EIHD$V_LNKDEBUG flag 2, You want save the output 3, Format of address symbols 4, Define your own address symbols 5, Modify the transfer address for debugging 0, $ search sys$share:*.req 'prefix' interpret these literals and macros and define corresponding symbols. SIPU uses the sys$scratch: directory for temporary files. Because the searching or interpreting may take a lot of times SIPU crate a permanent definition file for subsequent loading. File name: sys$scratch:SIPUDEF_'prefix'.COM For example: $ dir sys$scratch:sipudef*.* %DIRECT-W-NOFILES, no files found $ $ @SIPU APPLE.EXE SIPU> LOAD EIHD$ ! some seconds SIPU> quit $ DIR sys$scratch:sipudef*.* Directory USER$DISK:[MAULIS] SIPUDEF_EIHD$.COM;1 Total of 1 file. $ @SIPU APPLE.EXE SIPU> LOAD EIHD$ ! few hundreds :-) SIPU> quit $ 1, $ @SIPU APPLE.EXE SIPU> LOAD EIHD$ SIPU> EIHD$V_LNKDEBUG EIHD$V_LNKDEBUG (0050,00,01,00): 00000000 new value: 1 00000050: 00000029 SIPU> write current block updated in vbn 00000000 SIPU> quit $ You invoke the SIPU. Load the undocumented EIHD$ symbols from sys$share:lib.req. Enter the undocumented EIHD$V_LNKDEBUG symbol. SIPU displays what is EIHD$V_LNKDEBUG's value. You press a new value: 1. SIPU displays the current longworld. You enter the write command and SIPU writes current block. All integer displays in hexadecimal notation. 2, $ @SIPU APPLE.EXE SIPU> dcl define sys$output apple_vbn0.lis SIPU> ! just press SIPU> dcl deassign sys$output 3, Format of address symbols (field definition): "start byte, start bit, len, reserved" start byte: offset from base address in bytes start bit: offset from start byte in bits len: size of field in bits All values is interpreted by DCL so the decimal radix is the default. for example: EIHD$V_LNKDEBUG = "80,0,1,0" !decimal This is an 1-bit-wide field in byte #80. 4, SIPU> dcl transfer_address1 = "%x0070,0,64,0" SIPU> transfer_address1 TRANSFER_ADDRESS1 (0070,00,40,00): low longword: 00000340 high: FFFFFFFF new low: 00000070: 00000340 FFFFFFFF SIPU> The first line describes how you can create your own symbol. This example shows how to display (or modify) its contets. 5, $ link a.obj/notraceback/exe=apple !create an undebugable .exe $ @sipu apple.exe SIPU> load EIHD$ SIPU> ! just press return to view the debug APPLE.EXE VBN: 00000000 base: 00000000 00 04 08 0C 10 14 18 1C 0000 00000003 00000000 00000240 00000120 00000068 00000098 000000B8 00000000 0020 00030000 00000000 00000000 00000000 00000000 00000001 00000000 00000000 0040 00000000 FFFFFFFF FFFFFFFF 00000002 00000028 025D1B60 00000000 00000001 0060 00000000 00000010 00000030 00000000 00010030 00000000 00000000 00000000 0080 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000001 00A0 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000002 00C0 1B6050F5 009F825D 4D4C4104 00000041 00000000 00000000 00000000 00000000 00E0 00000000 00000000 00000000 00000000 2E315604 00000030 00000000 00000000 0100 32314106 0031302D 00000000 00000000 00000000 00000000 00000000 00000000 0120 00000001 00000001 00000024 00000200 00010000 00000000 0000100A 00000003 0140 00000000 00000001 00000001 00000024 00000200 00020000 00000000 00000800 0160 00000004 00000000 00000001 00000001 00000024 00000200 00030000 00000000 0180 0000004A 00000005 00000000 00000001 00000001 00000024 00002800 7FFF0000 01A0 00000000 0000000C 00000000 00FD0000 00000001 00000001 00000038 0016DE00 01C0 00000000 00000000 00000001 00000000 00030200 01000001 4345440C 48532443 01E0 30305F52 00000031 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF SIPU> EIHD$V_LNKDEBUG ! show symbol value EIHD$V_LNKDEBUG (0050,00,01,00): 00000000 new value: 1 00000050: 00000029 SIPU> show eihd$t_skip EIHD$T_SKIP = "112,0,0,0" ! 112(dec) = 70(hex) SIPU> dcl first_address="%x70,0,64,0" SIPU> dcl second_address="%x78,0,64,0" SIPU> first_address FIRST_ADDRESS (0070,00,40,00): low longword: 00010030 high: 00000000 new low: 340 ! debugger transfer address new high: -1 00000070: 00000340 FFFFFFFF SIPU> second_address SECOND_ADDRESS (0078,00,40,00): low longword: 00000000 high: 00000000 new low: 00010030 ! original entry point new high: 0 00000078: 00010030 00000000 SIPU> write current block updated in VBN:00000000 Current vbn is: 00000001 SIPU> quit $ r apple.exe OpenVMS Alpha Debug64 Version V7.2X-013 %DEBUG-I-NOUNIVERSALS, shareable image contains no universal symbols %DEBUG-I-INITIAL, Language: UNKNOWN, Module: SHARE$APPLE DBG> Exit ! it works :-)