Попытка работы с жедехом на Си

Тема в разделе "LANGS.C", создана пользователем facelift, 26 ноя 2008.

  1. facelift

    facelift New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    25
    Здравствуйте, товарищи. Я пишу МФЦ-программы на С++ и прочую офисную лабуду. Но вот пришлось столкнутся с системным программироваием. Стали возникать вопросы.
    Мое знание ассемблера ограничивается прочтением нескольких глав из учебника.
    Вот например я хочу чтобы у меня динамик запиликал. Я пишу драйвер (я работаю под виндой) и пытаюсь сделать следующее
    Код (Text):
    1. volatile char *beeper = (void *)0x00000061;
    2. *beeper = 1000;
    Естесственно BSoD. Я хочу обратится к портам ввода/вывода. А узнаю я их так: My Computer->Properties->Hardware->Device Manager->System Devices->System Speaker->Properties->Resources. И вот там будет I/O Range = 0061-0061. Вот это проты железяки? И как мне обратится к ним? А еще у меня есть старая паскалевская прога которая напрямую обращается к памяти, но использует сегмент+смещение. Как это можно преобразовать в "линейный" вид? И смогу ли я из драйвера обратится к физическому адресу? Можете еще посоветовать почитать что-либо?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    http://www.codenet.ru/progr/asm/norton/11.php
     
  3. facelift

    facelift New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    25
    Код (Text):
    1. __ams int 3h;
    DSoD again ((
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    facelift
    Мда.. во первых
    Код (Text):
    1. __asm int 3
    Во вторых:
    http://www.wasm.ru/forum/viewtopic.php?id=29640
    Медитируем каждую букву до просветления. Как все пункты выполнишь - тогда сюда пиши.
     
  5. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    в сях "__asm int 3" генерит 1байтовую или 2байтовую инструкцию?
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    GoldFinch
    А посмотреть ? Вообще то однобайтовая.
    Ладн в общем скомпилил чтоб небыло разногласий:
    Код (Text):
    1. ; 22   :     __asm int 3;
    2.   0003b cc       int     3
    Как видим CC
    Ч.Т.Д.
     
  7. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    facelift
    Конечно бсод, тыже не в порты пишешь, а в память, которая зарезервирована специально чтобы подобный код ловить :)))
    К портам обращаются инструкциями in, out и тп.
     
  8. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    И "__asm int 3" в драйвере конечно же будет давать BSOD если не установлен kernel-mode отладчик.
    А ты хотел чтоб что случилось?
    Однобайтовую, но какая разница?
    Двухбайтовая будет работать точно так же.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    cppasm
    не совсем, винда очень криво реагирует на CD 03. Можешь проверить хотя бы в юзермоде

    READ_PORT_UCHAR
    WRITE_PORT_UCHAR

    или как уже сказали in/out
    а зачем тебе бряк? если хочешь его поймать то либо ставь отладчик либо ставь _try/_except
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    А в чём кривизна?
    Olly по крайней мере нормально отрабатывает, за исключением того что останавливается на следующей команде.
    А она на DebugAPI основана вроди.