Page 2 of 3

Re: Новичок

Posted: Tue Sep 17, 2013 6:44 pm
by Tain_Play
Тогда еще вопрос: а драйвер что это и как он пишеться? ссылку не можете полезную дать?
P.S.: я скомпилил картинку набраную по пикселю(два квадратика) в 13h, запустил и монитор ее не так сильно растянул, почти незаметно. Думаю если драйвер не успею написать или не вычислю номерок этого режима, то использую его.(Побочный эффект - вместо одного пикселя горят 8 о_О)
P.P.S.: как говорил Линус: Вы скорбите по тем временам, когда мужчины были настоящими мужчинами и сами писали драйверы устройств?

Re: Новичок

Posted: Tue Sep 17, 2013 6:53 pm
by yogev_ezra
Tain_Play wrote:Тогда еще вопрос: а драйвер что это и как он пишеться? ссылку не можете полезную дать?
Драйвер - это 300 строчек кода вместо 3 :-) Вот определение драйвера из Википедии.
Вот пример из KolibriOS - драйвер для видеокарт Intel GMA, который читает правильное разрешение через EDID, и устанавливает его сам: http://websvn.kolibrios.org/filedetails ... dintel.asm
Может быть, ты сможешь воспользоваться им в своей ОС, если видеокарта тоже Intel GMA.

Re: Новичок

Posted: Tue Sep 17, 2013 9:16 pm
by art_zh
Драйвером называют код, который пофиг ядру и мешает программе.

Posted: Tue Sep 17, 2013 9:19 pm
by Tain_Play
ну у меня джифорс 2

Re: Новичок

Posted: Tue Sep 17, 2013 9:22 pm
by art_zh
Tain_Play wrote:Я для конкурса пишу графическую ос, ...
Tain_Play wrote:... еще вопрос: а драйвер что это и как он пишеться?
:lol:

Re: Новичок

Posted: Wed Sep 18, 2013 11:51 am
by Tain_Play
У меня еще 4 месяца! и я без них хаороше справлялся(драйвер мыши к примеру я не зная как он называеться написал с подсказками) я не втирал ведь что это "драйвер" а про работу с видюхой это вообще мне не скоро понять

Re: Новичок

Posted: Wed Sep 18, 2013 3:52 pm
by Serge

Re: Новичок

Posted: Wed Sep 18, 2013 8:25 pm
by Unduing
Подскажите как может влиять nop на выполнение кода, голову сломал почему

работает:

Code: Select all

.1000160F: 6800300010                     push        010003000 ;'► 0 '
.10001614: FF1518200010                   call        LoadLibraryW
.1000161A: 85C0                           test        eax,eax
.1000161C: E975000000                     jmp        .010001696 --↓4
.10001621: 9090                           nop
и не работает:

Code: Select all

.1000160F: 9090                           nop
.10001611: 6800300010                     push        010003000 ;'► 0 '
.10001616: FF1518200010                   call        LoadLibraryW
.1000161C: 85C0                           test        eax,eax
.1000161E: E973000000                     jmp        .010001696 --↓4
логичных причин почему не работает второй вариант не вижу

Re: Новичок

Posted: Thu Sep 19, 2013 12:47 am
by Mario_r4
Unduing
Такая информация без контекста малоинформативна. Лучше показать все исходники, потому что причина может быть совсем не в nop.

Re: Новичок

Posted: Thu Sep 19, 2013 2:30 am
by art_zh
Unduing

имхо баг может быть только внутри LoadLibraryW - что-то портит бит1 (и возможно, не только его) в адресе возврата.
В первом примере этот бит 1 (1000161A), во втором 0 (1000161С).
Других отличий отсюда не видно.

Смотри что там внутри обращается к [entry_esp+4]

Re: Новичок

Posted: Thu Sep 19, 2013 6:49 am
by 0CodErr
Unduing, а почему так сильно изменилось значение смещения перехода в jmp?

Code: Select all

E975000000                     jmp        .010001696 --↓4

Code: Select all

E973000000                     jmp        .010001696 --↓4

Re: Новичок

Posted: Thu Sep 19, 2013 7:38 am
by Unduing
0CodErr
Абсолютный адрес перехода остался прежним.

Re: Новичок

Posted: Thu Sep 19, 2013 7:44 am
by Unduing
art_zh
Спасибо, такой момент не учел, но ещё не разу не видел чтобы в коде процедуры использовался адрес вызова.

Re: Новичок

Posted: Thu Sep 19, 2013 7:46 am
by Unduing
Mario_r4
Были бы исходники, думаю вопрос не возник.

Re: Новичок

Posted: Thu Sep 19, 2013 3:18 pm
by CleverMouse
Unduing wrote:логичных причин почему не работает второй вариант не вижу
Проверка целостности кода где-то в другом месте.