Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > чтение памяти


Автор: ecspertiza 23.1.2009, 10:42
Нашёл на форуме как прочесть облость памяти 
Код

* (reinterpret_cast<char * >0x02A61ACA)


а может кто нибудь подсказать как прочесть строку по адресу 0F000h:0E060h, несерчайте сильно если вопрос глупый я с ассемблером практически незнаком.

Автор: Lazin 23.1.2009, 10:51
а вопрос в чем?

Автор: ecspertiza 23.1.2009, 10:53
вопрос в том как прочесть  строку по адресу 0F000h:0E060h?

Автор: Lazin 23.1.2009, 11:12
а ты уверен что ее можно прочесть?

Автор: ecspertiza 23.1.2009, 11:24
ну вообще да, вот линка http://pascal.sources.ru/asm/faq/index.htm, там написано что строка по адресу 0F000h:0E060h содержит имя фирмы-изготовителя и версию BIOS'а, а мне оч нужно получить параметры биоса.


З.Ы. Плохих намерений нету, это необходимо для лицензирования софта.

Автор: Lazin 23.1.2009, 12:30
это для DOS

Автор: ecspertiza 23.1.2009, 12:32
тоесть под линухами или под виндой эту строку прочесть нериально?

Автор: MAKCim 23.1.2009, 12:43
Цитата(ecspertiza @  23.1.2009,  12:32 Найти цитируемый пост)
тоесть под линухами или под виндой эту строку прочесть нериально? 

под Linux так
Код

int fd = open("/dev/mem", O_RDONLY);
lseek(fd, 0xfe060, SEEK_SET);
char s;
do {
    if (read(fd, &s, sizeof(s)) != sizeof(s)) {
        /* error */
    }
    ...
} while (/* end of string condition */);

Автор: andrew_121 23.1.2009, 13:25
ecspertiza, Для Винды используй WINIO(http://www.internals.com/utilities/winio.zip)
Или:
Код

#define IDENTIFICATOR(cbf) { \
    unsigned int int_val, int_val1; \
    char string[20 + 1] = "\0"; \
    asm mov eax, 0; \
    asm cpuid; \
    asm mov string[0], bl; \
    asm mov string[1], bh; \
    asm ror ebx, 16; \
    asm mov string[2], bl; \
    asm mov string[3], bh; \
    asm mov string[4], dl; \
    asm mov string[5], dh; \
    asm ror edx, 16; \
    asm mov string[6], dl; \
    asm mov string[7], dh; \
    asm mov string[8], cl; \
    asm mov string[9], ch; \
    asm ror ecx, 16; \
    asm mov string[10], cl; \
    asm mov string[11], ch; \
    asm mov eax, 1; \
    asm cpuid; \
    asm mov int_val, eax; \
    int_val1 = (int_val >> 8); \
    memcpy(string + 12, &int_val1, 4); \
    asm mov eax, 1; \
    asm cpuid; \
    asm mov int_val, eax; \
    int_val1 = ((int_val >> 4 ) & 0x0000000f); \
    memcpy(string + 16, &int_val1, 4); \
    string[20] = '\0'; \
    char STRING_ID[] = {0x41,0x75,0x74,0x68,0x65,0x6e,0x74,0x69,0x63,0x41,0x4d,0x44,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00}; \
    if ( memcmp(string, STRING_ID, 20) != 0 ) { \
        (*cbf)("Неверный идентификационный номер !!!"); \
        exit(-1); \
    } \
}

Проверка серийника CPU.

Автор: ecspertiza 23.1.2009, 13:57
andrew_121, извеняюсь за свою неосведомлённость но всё же, как юзать сие код?

Автор: Kallikanzarid 23.1.2009, 16:25
Блин, купи учебник по орфографии, и еще один - про защищенный режим процессора!  smile 

Автор: ecspertiza 23.1.2009, 17:41
Цитата(Kallikanzarid @  23.1.2009,  16:25 Найти цитируемый пост)
Блин, купи учебник по орфографии

 бесполезно это гены, а вопрос с чтением нужных параметров биоса решён, под линуксами пользовал ф-ции dmidecoder, а под виндой давно написанную своими руками dll-ку. 

Автор: vinter 23.1.2009, 18:17
Kallikanzarid, хватит хамит участникам форума, нечего сказать - не пиши ничего.

Автор: MAKCim 23.1.2009, 19:15
Kallikanzarid

M
MAKCim
Модератор: Ведите себя корректно

Автор: ecspertiza 23.1.2009, 21:38
кстати кому будет интересно, скоро выложу заголовок в Разделе кросс платформенного программирования, в теме слепок железа, правда он скорее под QT подойдёт.

Автор: andrew_121 24.1.2009, 14:36
Цитата(ecspertiza @  23.1.2009,  21:38 Найти цитируемый пост)
правда он скорее под QT подойдёт. 

Qt - Это есть хорошо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)