Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
С++. Ассемблер. Прерывания |
Философия, технологии, алгоритмы! |
|
|
Опции темы |
27.01.2012, 23:30 | #31 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
Книжка Пирогова на озоне.
К сожалению нету в продаже но можно найти на других ресурсах Да, смотри сайт wasm.ru. Там огромное количество статей для начинающих. И с помощью софта сможешь сделать первые шаги в твоём любимом асме |
27.01.2012, 23:56 | #34 | |
Форумец
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Charles Petzold (Microsoft Press) Крайне рекомендую. И книгу и автора в целом. Если Кнут для меня был книгой откровений в алгоритмах, то Петзольд разьяснил - каким местом думали Билли & co, когда разрабатывали винду. |
|
28.01.2012, 00:01 | #35 |
Форумец
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
|
28.01.2012, 00:36 | #37 |
Форумец
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Ну, батенька, это уже слишком глубоко. Если только драйвера разрабатывать. Но это уже отдельный разговор.
Так, Спартак, тема скатывается во флуд, ты уже должно быть понял что изначальная постановка вопроса неверна. Посему подразберись в полученной информации и сформулируй, при необходимости, другую тему. А эту я неторопливо прикрою. |
28.01.2012, 00:41 | #38 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
|
28.01.2012, 01:09 | #39 | |
Форумец
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Второе. Никакой "упор" не идет. Я баловался с теми штуками, о которых ты говоришь. ОЧЕНЬ интересно, но практической пользы - ноль целых, ноль десятых. Если только речь идет об очень крупном проекте, в котором ошибки надо предупреждать, поскольку цена каждой будет измерятся сотнями часов и, соответственно, тысячами долларов. В качестве резюме: и то и другое нужно, просто в разных случаях. Эту ветку я снесу в болталку, впоследствии. Или можно тему отдельную открыть, вопрос, в целом, вполне себе интересный. И мне в том числе. Спартак "наш человек", поэтому зверствовать не буду (я крайне против флуда и подколов в темах, которые создали люди, которые незнакомы с контингентом данного раздела, но тут позволю и себе и остальным в меру пофлудить). Но недолго, если будет интерес, создаем тему и там общаемся по поводу статического анализа кода. Так ее и назовем. Последний раз редактировалось Spectator; 28.01.2012 в 13:35. |
|
28.01.2012, 14:15 | #41 | |
Форумец
Сообщений: 39,870
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Спартак, ну напиши же, наконец, что ты хочешь получить, вход, выход, язык, среда, ОС. Ты программист или куда? Чёткая постановка вопроса - это наше всё. |
|
09.02.2012, 13:15 | #42 |
Форумец
Сообщений: 1
Регистрация: 09.02.2012
Не в сети |
Ниже пример как, в usermode, получить iopl ring0 и бипнуть через порты (бип взят из hal.dll). У меня не пищит - потерялся динамик.
Код:
#include <tchar.h> #include <iostream> #include <windows.h> bool SetPrivilegeState(HANDLE aToken, LUID& aPrivId, bool aState) { TOKEN_PRIVILEGES tTp; bool tRes = false; tTp.PrivilegeCount = 1; tTp.Privileges[0].Luid = aPrivId; tTp.Privileges[0].Attributes = (aState ? SE_PRIVILEGE_ENABLED : 0); if (AdjustTokenPrivileges(aToken, FALSE, &tTp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) tRes = true; if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) { tRes = false; }; return tRes; }; bool SetPrivilegeState(HANDLE aToken, const _TCHAR* aPrivName, bool aState) { LUID tLuid; bool tRes = false; if (LookupPrivilegeValue(NULL, aPrivName, &tLuid)) tRes = SetPrivilegeState(aToken, tLuid, aState); if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) { std::cout << "User has not privilege : " << aPrivName << std::endl; }; return tRes; }; bool SetTcbPrivilegeState(HANDLE aProc, bool aState) { HANDLE tToken; bool tRes = false; if (OpenProcessToken(aProc, TOKEN_ADJUST_PRIVILEGES, &tToken)) { tRes = SetPrivilegeState(tToken, _TEXT("SeTcbPrivilege"), aState); CloseHandle(tToken); }; return tRes; }; bool EnableUserIOPL_R0(HANDLE aProc) { typedef NTSTATUS (__stdcall *TSetProcInfoFunc)(HANDLE, long, void*, unsigned long); int UserIOPL = 16; bool tRes = false; HMODULE tLib = LoadLibrary(_TEXT("ntdll.dll")); if (tLib) { TSetProcInfoFunc tSetFunc = (TSetProcInfoFunc)GetProcAddress(tLib, "NtSetInformationProcess"); if (tSetFunc) { NTSTATUS tStat = tSetFunc(aProc, UserIOPL, NULL, 0); tRes = (tStat >= 0); }; FreeLibrary(tLib); }; return tRes; }; bool EnableSystemIo() { bool tRes = false; HANDLE tProcHandle; if (DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), &tProcHandle, PROCESS_ALL_ACCESS, FALSE, 0)) { if (SetTcbPrivilegeState(tProcHandle, true)) { tRes = EnableUserIOPL_R0(tProcHandle); }; CloseHandle(tProcHandle); }; return tRes; }; void BeepSignal(unsigned long aFreq)//hall.dll HalMakeBeep() { const long tTimerFreq = 0x1234CF; __asm { in al, 0x61 and al, 0xFC out 0x61, al }; if (aFreq > 0) { aFreq = tTimerFreq / aFreq; if (aFreq < 65000) { __asm { mov al, 0xB6 out 0x43, al mov eax, [aFreq] out 0x42, al mov al, ah out 0x42, al in al, 0x61 and al, 0xFC out 0x61, al }; }; }; }; int _tmain(int argc, _TCHAR* argv[]) { if (EnableSystemIo()) { BeepSignal(600); Sleep(1000); BeepSignal(0); }; return 0; } |