Здравствуйте, vasketsov, Вы писали:
Вот как я написал программу под Дос:
void Asm(char * num)
{
char mb[40];
int i = 0;
char nm;
asm push ax
asm push ds
asm push si
asm push cx
asm mov ax, 0xF000
asm mov ds, ax
asm mov si, 0xEC71
asm mov cx, 40
asm cld
Repiat:;
asm lodsb
asm mov [nm], al
mb[i] = nm;
++i;
asm or al, al
asm jne Repiat
Exit:;
asm pop cx
asm pop si
asm pop ds
asm pop ax
strcpy(num, mb);
}
И прога вытягивает нужную и правильную инфу (работает под Досом)
Здесь видно, что адрес имеет значение F000 EC71.
Однако в программе Русиновича в качестве адреса вводим fec71, byte: 21. Программа выдаёт длинный листинг, в котором и просвечивается искомый серийный номер. Привожу фрагмент:
000FEC50: 04 02 00
05 03 01 2E 20 -41 E9 E4 9E
64 20 53 6F ....... AщфЮd So
000FEC60: 00 00 00 00 00 00 00 00 -14 63 2E 20 41 77 61 72 .........c. Awar
000FEC70:
26 30 33 2F 30 31 2F 31 -
39 39 39 2D 69 34 34 30 .03.01.1999.i440
000FEC80: 4C 58 2D 53 4D 43 36 30 -32 2D 32
41 36 39 4A 58 LX.SMC602.2A69JX
000FEC90:
33 42 43 2D 30 30 00 E8 -06 00 75 03 E9 27 F6 CF 3BC.00.ш..u.щ.Ў?
Тут серийным номером является 2A69JX3BC.
Пределать прогу под свои нужды не представляется сложным. Однако physmem НЕ работает под Win9x! Таким образом, для меня проблема оказалась решённой только наполовину.