Re[11]: Чтение данных из физической ячейки памяти
От: SPavel Украина  
Дата: 20.01.03 09:56
Оценка:
Здравствуйте, 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! Таким образом, для меня проблема оказалась решённой только наполовину.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.