Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

24.01.2008, 01:27
|
|
Members of Antichat - Level 5
Регистрация: 28.05.2007
Сообщений: 729
Провел на форуме: 5571194
Репутация:
1934
|
|
или
lea dx,message вместо mov dx,offset message
|
|
|

24.01.2008, 01:54
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
Непонятно почему люди начинают с win16 )))
|
|
|

24.01.2008, 01:57
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
моделька досовская.... в принцыпе можно было не заморачиваться
а заменить mov на lea и грузить реальный адрес а не смещение.
|
|
|

05.02.2008, 18:43
|
|
Познающий
Регистрация: 20.12.2007
Сообщений: 36
Провел на форуме: 71113
Репутация:
20
|
|
хочу написать прогу которая выводит текущий ип в плане освоения диалоговых окон.
есть примерно такого вида наработка вызова модального диалогового окна. она находиться в конце, чтобы не мусорить вопрос. вообщем проблема в том что я не могу заставить его работать - оно просто не отображается. те происходит вызов функции и возвращаемое значение равно -1, что не есть гуд.
рассуждения, пожалуй, писать не буду, а то уже наученный горьким опытом знаю что там будет бред.
вообщем они самые наработки.
жаль что приатачить нельзя, но думаю в ресурсах ошибки быть не должно, так что их не выписываю.
ну и теперь: как это заставить работать?
Код:
.386
.model flat,stdcall
option casemap:none
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
DlgName db "MyDialog",0
AppName db "First",0
.data?
hInstance HINSTANCE ?
.const
MyDialog equ 101
IDC_IPADDRESS1 equ 1000
IDM_EXIT equ 32003
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
invoke GetDlgItem, hWnd,IDC_IPADDRESS1
invoke SetFocus,eax
.ELSEIF uMsg==WM_CLOSE
invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start
|
|
|

05.02.2008, 19:21
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
TruPAC При вызове функции
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
DlgName - не должен быть DlgName db "MyDialog",0 Это индетификатор описания окна, который по идеи храниться в ресурсе, также как и IDC_IPADDRESS1...
По идеи у тебя уже обьявлен индетификатор окна
.const
MyDialog equ 101
IDC_IPADDRESS1 equ 1000
IDM_EXIT equ 32003
Русурсы ты не выложил, поэтому можно предпологать, что с ними все ок! Поэтому есть вариант попробывать так...
invoke DialogBoxParam, hInstance, MyDialog ,NULL, addr DlgProc, NULL
Окно должно создасться с условием если описание окна в ресурсах соответствует спецификациям 
|
|
|

06.02.2008, 11:32
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
маленькие проблемки
Приветики, у меня есть вопросик, но сначала обрисую ситуацию.
Сидела я как то вечером перед монитором и решила написать свою маленькую ось, дабы закрепить азы асемблера. А сама блондинка блондинкой в этом. Взяла копы книжек в королевстве дежавю и замке пдф. Сходила к старцу васму. Послала гонцов в гугль. В итоге написала загрузчика (конечно же на дискетку((((). Написала ядро для нее. Теперь вопрос (простите Выпросы
у меня с загрузчика на ядро управление передаеться :
да кстати ось работает в текстовом режиме 80х25
mov ah, 00h
mov al, 03h
int 10h
собственно вопрос вот в чем:
когда я ввожу команду, она идет на выполнение, вот пример:
chelp db "help", 0
chelp_tail:
......
help_msg db "тут приветствие", 0Dh,0Ah,0
......
......
lea si, command_buffer
mov cx, chelp_tail - offset chelp ; size of ['help',0] string.
lea di, chelp
repe cmpsb
je help_command
......
......
; +++++ 'help' command ++++++
help_command:
; scroll text area 11 lines up:
mov al, 11
call scroll_t_area
; set cursor position 11 lines
; above prompt line:
mov ax, 40h
mov es, ax
mov al, es:[84h]
sub al, 11
gotoxy 0, al
lea si, help_msg
call print_string
mov al, 1
call scroll_t_area
jmp processed
Как сделать так чтобы при вводе команды, допустим "tasm" у меня запускался внешний файл "exe" or "com" любой. То есть независимо от адресного пространства?
Я не знаю как назвать это, ну то есть чтобы можно было осуществить выход за пределы ядра, как бы мультизадачность.
|
|
|

06.02.2008, 17:19
|
|
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме: 4226592
Репутация:
2175
|
|
это не ОС никакая...
по4ему под 16разрядн. пишем? проще под винь и invoke ShellExecute
|
|
|

07.02.2008, 00:20
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
по4ему под 16разрядн. пишем? проще под винь и invoke ShellExecute
))) блин а я то дура думала, есив я загружаюсь с дискетки, меня приветствует загрузчик, потом появляеться приветствие ОС и в итоге я могу выполнять некоторые команды - это однозадачная ос, а оказываеться нет, да при том она и 16 разрядная? какая досада((( не гони. Есив это написано и откомпиленно не на тасме и не на масме то это не значит что это 16 разрядный асемблер.
вопрос был другой как с ядра обращаться к посторонним файлам.
|
|
|

07.02.2008, 00:34
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
А Dos и есть и был однозадачный. Там и ядра то не было.... и у тебя не будет! Есть БИОС таблица прерываний.....часть БИОСА часть под Dos заточена....там все есть,что тебе нужно! А грузится все энто бизобразие в единое адресное пространство 640Килобайт 8)).. соответственно расслабься грузи программу в память определяй точку входа и передавай управление.
Или "вытесняющая многозадачность"мастдая вьелась в моск?
А вообще мадам.... вы похоже идете в сторону MBR вируса... дык зайдите на lab29a... возьмите лучший образец и "думайте" ....там то управление передается на оригинальный загрузчик.
Последний раз редактировалось Delimiter; 07.02.2008 в 00:46..
|
|
|

07.02.2008, 02:38
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
зайдите на lab29a... возьмите лучший образец и "думайте"
это я все просматрела. На счет доса и много задачности.
Я в замешательстве. Есть разница между графическим и текстовым режимом?
а то вот тут я наблюдаю много задачность Manuet OS v0.78. 
под Fat 12 так е на флопике. Имеет возможность запускать файлы и работать с ними не зависимо от адресного пространства. И там и у меня система 32-х битная.
Со всей симпатией за помощь в развитии моих знаний Delimiter но как это понимать?
А Dos и есть и был однозадачный. Там и ядра то не было.... и у тебя не будет!
Как раз таки через прерывание эти действия и производяться, вот только я пока не могу понять как.
PS: DOS -дисковая операционная система, не все они однозадачные:-)
Многозадачная, многопользовательская операционная система DOS-Line
В реальном режиме мы имеем 640Kb памяти - 10 сегментов по 64Kb. В первый сегмент лучше не соваться - эта область BIOS. Для простоты предположим, что каждая задача нашей ОС - это COM файл MS-DOS.
COM-программы содержат единственный сегмент (или, во всяком случае, не содержат явных ссылок на другие сегменты). Образ COM-файла считывается с диска и помещается в память, начиная с PSP:0100. Притом COM-программа может использовать множественные сегменты, но она должна сама вычислять сегментные адреса, используя PSP как базу.
В MS-DOS после загрузки двоичного образа:
CS, DS, ES и SS указывают на PSP
SP указывает на конец сегмента PSP (обычно 0fffeH, но может быть и меньше, если полный 64K сегмент недоступен). Слово по смещению 06H в PSP указывает, какая часть программного сегмента доступна.
Вся память системы за программным сегментом распределена программе.
Слово 00H помещено (PUSH) в стек.
IP содержит 100H (первый байт модуля) в результате команды JMP PSP:100
задача при загрузке файла проделать те-же самые действия, что-бы программы ни коим образом не догадывалась об отстутствии ее родной ОС.
Предположим, что каждая COM-программа занимает в памяти один сегмент.
18.2 раза в секунду приходит аппаратное прерывание, и процессор отвлекается на выполнение некоторой процедуры - восьмого прерывания (int 08h). При этом он сохраняет в стеке регистр флагов (PUSHF), и регистры указывающие на текущую команду (CS:IP) (PUSH CS, PUSH IP). Всего 6 байт. После окончания аппаратного прерывания эти регистры восстанавливаются и основная программа продолжает свое выполнение.
Задача, состоит в том, чтобы во время выполнения прервания подменять стек таким образом, что-бы после восстановления регистров выполнялась другая программа, находящаяяся в памяти.
При наилучшем раскладе возможна загрузка восьми задач - 640Kb/64Kb=10, то есть всего имеем десять сегментов - один под переменные DOS, и один под ядро, вот и остается только восемь.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|