|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.09.2010, 23:11 | #1 |
Пользователь
Регистрация: 26.09.2010
Сообщений: 11
|
Доступ к байту с заданным адресом (чтение)
Здравствуйте. Дело такое: есть адрес в памяти, по нему нужно считать байт. VS 2008 ругает - Bad ptr, нет доступа. В какой-то мере понятно - этот адресс программе никто не выделял. Но как получить доступ? Важно чтение, запись не важна.
Заранее спасибо. |
26.09.2010, 23:17 | #2 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 197
|
ReadProcessMemory.
Базовый адрес процесса почти всегда равен $400000, к этому адресу прибавишь оффсет. Если я правильно помню, то записывается как (LPVOID)$400000. |
27.09.2010, 00:12 | #3 |
Пользователь
Регистрация: 26.09.2010
Сообщений: 11
|
Я пытаюсь считать данные таблицы SMBIOS. Понятие не имею, что за процесс использует память, которая мне нужна.
Никак нельзя исключить использование API? Последний раз редактировалось Stilet; 28.09.2010 в 08:49. |
27.09.2010, 00:18 | #4 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
а как ты себе это представляешь?Распределением памяти занимается ОС и благодаря её API можно использовать привилегированные(запрещенные) команды такие как чтение и запись памяти любого запущенного процесса. И код ассемблера не поможет, как только ОС заметит, что другой процесс использует запрещенные команды, она его блокирует.
Последний раз редактировалось NiCola999; 27.09.2010 в 00:22. |
27.09.2010, 00:19 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
хуже, чтоб прочесть произвольный адрес физической памяти(а не виртуальной памяти процесса) вам нужно в Ring 0(в ядро) попасть, а это пахнет драйвером режима ядра
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.09.2010, 00:30 | #6 |
Пользователь
Регистрация: 26.09.2010
Сообщений: 11
|
Короче, чтобы прочесть физический адрес, нужно написать много букв сложного кода, понял. Ладно. А как прочесть физический адрес с помощью API? Я не знаю, за каким процессом он числится.
|
27.09.2010, 00:36 | #7 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
Насколько я знаю физический адрес прочесть невозможно даже с помощью api(кроме режима ядра), потому что система работает с виртуальными адресами, преобразование его в физический делает отдельная часть процессора (курс ОС)
И не надо писать много кода, с api всё просто Код:
Последний раз редактировалось NiCola999; 27.09.2010 в 00:42. |
27.09.2010, 00:45 | #8 |
Пользователь
Регистрация: 26.09.2010
Сообщений: 11
|
Курс системное ПО только начался. Надо курсовик делать) Придумал тему - считывание показателей температуры, нагрузки, вращение вентиляторов и прочие данные о железках. Думал - непросто. Погуглил - все делается через WMI API. А она берет данные из SMBIOS. Думал, ради усложнения, самому взять данные из SMBIOS) Прочитал ее спецификацию, узнал по каким адресам нужная информация хранится, а тут такие дела =(
P.S. 2NiCola999 Я не знаю, за каким процессом числится адрес! Я знаю только его значение - 0x000f0000. Хотя бы его прочитать. |
27.09.2010, 10:47 | #9 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
в твоем случае можно вопсользоваться ассемблером
Последний раз редактировалось NiCola999; 27.09.2010 в 10:54. |
27.09.2010, 20:45 | #10 |
Пользователь
Регистрация: 26.09.2010
Сообщений: 11
|
Мне по задумке надо работать не только с одним байтом, а с большой таблицей, которая там размещена... Буду гуглить, как попасть в ring 0. Я не представляю, как писать драйвер режима ядра, но у меня еще до ссесии уйма времени) Буду очень признателен, если подскажете литературу.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с адресом сайта | Приклад | PHP | 5 | 11.09.2010 18:06 |
Socket / Доступ к буферу чтения сокета / Чтение из буфера | bwwebm | Работа с сетью в Delphi | 1 | 29.04.2010 10:42 |
помогите с адресом пожалуйста | rudolfe | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 07.03.2009 13:19 |
Проблема с адресом файла | Геля | Общие вопросы Delphi | 8 | 20.04.2007 20:48 |
Помогите с IP-адресом! | gluk666 | Работа с сетью в Delphi | 1 | 25.02.2007 09:28 |