Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2015, 15:08   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
чё ты хочеш делать с первым прерыванием?
Это в ВУЗе задали )
У нас тоже такое было.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2015, 15:16   #12
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это в ВУЗе задали
...по-мне - так ВУЗы начинают с конца!
Зачем задавать вопросы, которые ещё не проходили? (или проходили, но ТС в это время занимался всеми известными нам действиями). В любом случае - ученики в ответе). Учетилям - респект!
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 12.05.2015, 15:45   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
ВУЗы начинают с конца!
Не знаю с какой стороны они начинают, но конец у всех вузов на постсовке печальный )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2015, 16:07   #14
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
но конец у всех вузов на постсовке печальный )
...год учиш чела, а он на экзамене не знает элементарного.
Вот хде "бесцельно прожитые годы". Лучше быть учеником, чем учителем.

Было такое, что не могут сложить по-бину 2 +2 ...
В моё время, учитель бил меня указкой (если не не знаю), а щас по-пробуй.. И дело не в том, что ты слабее, - а просто НИЗЯ!!!!

Или ученики не такие, или учителя отрафировали.... ХЗ
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 12.05.2015, 16:08   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Или ученики не такие, или учителя отрафировали
И то и другое и обычно без хлеба. И мы от темы откололись. По-моему обсуждение нравственности сейчас бесполезно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2015, 16:16   #16
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Stilet +1
..тема не для этого создавалась.
А топик-стартер пусть читает первый сектор и всё... Он доступен для чтения..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 12.05.2015, 22:18   #17
Malriser
xor esp, esp
Форумчанин
 
Регистрация: 11.02.2014
Сообщений: 135
По умолчанию

Во-первых, в Windows чтение по нулевому адресу вызовет ошибку "Access Violation: can not read memory at 00000000"



Предлагаю начать с 0001h, но у меня и там везде Access Violation в Win7, поэтому правим права с помощью VirtualProtect ( ха-ха, возвращает ERROR_INVALID_ADDRESS ). В MessageBox надо вывести в виде строки или в виде байт-строки?

Накатал прогу, что читает первые 400 байт своего заголовка из памяти. Изменить на от 0000h до 400h не составит совершенно никакого труда, хоть в винде и получите Access Violation

MASM:

Код:
.486
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib kernel32
includelib user32

.data
MesText db 'DATA FROM %X to %X: ',0Ah, '%s',0 ; строка для wsprintfA

AddressEnd dd 0



.code
start PROC

invoke  GetModuleHandle, 0                                              ; получаем наш ImageBase
add     eax, 400h                                                       
mov     dword ptr [AddressEnd], eax                                     ; пишем адрес окончания чтения

mov     ebx, eax
sub     ebx, 400h                                                       ; в ebx - адрес начала

invoke  VirtualAlloc, 0, 802h, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE; выделяем виртуальную память
                                                                        ; размером 802h байт, туда читаем данные размером 400h, потом копируем их по адресу 401h, последний байт - нулевой
test    eax, eax
je      @Exit 
mov     esi, eax                                                        ; если не выделили память - выход
invoke  VirtualProtect, ebx, 400h, PAGE_EXECUTE_READWRITE, esp          ; правим права доступа
test    eax, eax                                                        ; если провал - ошибку выдаем
je      Error

mov     ecx, ebx
push    ebp 
xor     ebp, ebp
@Loop:
mov     dl, byte ptr [ecx + ebp]                                        ; берем от туда байт
mov     byte ptr [esi + ebp], dl                                        ; пишем по выделенной памяти
inc     ebp

cmp     ebp, 400h
jl      @Loop                                                           ; если меньше 400h переход на Loop
                                                                        ; аналог: for (int ebp = 0; ebp < 0x400; ebp++)

lea     edi, [esi + 401h]


Rewriter:

cmp     byte ptr [esi + ebp], 0
jnz     Next                                                            ; если байт по адресу esi + ebp не равен нулю - прыжок на Next

mov     byte ptr [esi + ebp], ' '                                       ; иначе пишем по этому адресу вместо нуля пробел. Дело в том, что мы хотим вывести это, как строку, а в ней ноль - конец.

Next:

dec     ebp
jnz     Rewriter                                                        ; если не равен нулю - прыжок на Rewriter
 
add     ecx, 400h
invoke  wsprintfA, edi, offset MesText, ebx, ecx, esi      ; формируем строку, что выведем на экран, введя препода в шок.

invoke  MessageBoxA, 0, edi, edi, MB_ICONINFORMATION
@Exit:
invoke  ExitProcess, 0

ErrMes db 'Error: не удается изменить атрибуты доступа по памяти, что прописана в коде. Вы уверены, что там что-то есть?',0

Error: 
invoke  MessageBoxA, 0, offset ErrMes, offset ErrMes, MB_ICONERROR
jmp @Exit

ReadAddrEnd dd 0

start ENDP
end start
Результаты:

P.S. У вас точно Windows? Вроде по скрину винда, а по задаче - нет. Хотя мессаджбокс вроде требуете, хз - бред какой-то. Мож с другими адресами попробовать?
Malriser вне форума Ответить с цитированием
Старый 12.05.2015, 22:49   #18
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Malriser Посмотреть сообщение
в Windows чтение по нулевому адресу вызовет ошибку
...это в винде,.а в досе запрет на адреса FFFF. Там всё наоборот
Винда скопировала вектора и всё. Ты хочеш сказать, что нельзя перехватить прерывания?!
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 12.05.2015, 23:18   #19
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Null2410 Посмотреть сообщение
Нужно прочитать данные из памяти по адресу от 00000h до 00400h
Код:
   iret
   cli
   mov  cx,400
reads:
   stosb
   loop reads
...встречай таблицу векторов в ES:DI
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 12.05.2015 в 23:21.
R71MT вне форума Ответить с цитированием
Старый 12.05.2015, 23:27   #20
Malriser
xor esp, esp
Форумчанин
 
Регистрация: 11.02.2014
Сообщений: 135
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
...это в винде,.а в досе запрет на адреса FFFF. Там всё наоборот
Винда скопировала вектора и всё. Ты хочеш сказать, что нельзя перехватить прерывания?!
В винде? В нулевом кольце может и можно, но в юзермоде тебя ОС пошлет нафиг, ты даже эти прерывания юзать не сможешь.

Кстати, а у ТС именно винда, он скрин кидал, где компилил в MASM32 на винде...
Malriser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать данные с LDAP сервера SailarmoonKS C# (си шарп) 10 05.08.2015 17:50
прочитать адрес памяти из stdin и вывести что находится по адресу frommars Общие вопросы C/C++ 0 18.02.2014 20:42
Прочитать значение адреса из памяти другой программы Xo66um Общие вопросы Delphi 3 23.09.2013 16:27
Прочитать данные, записанные на C Claptrap Общие вопросы Delphi 0 03.04.2010 20:14
Прочитать данные из Excel viter.alex Microsoft Office Excel 7 03.03.2009 14:35