Eugene
Лучшая IDE — Far Manager 😁
Лучшая IDE — winhex.
Eugene
Или Hiew :)
dukeBarman
Не, он себя раскрывает именно в связке с far :))
Anonymous
самое лучшее это far + sasm
Aiwan \ (•◡•) / _bot
Anonymous
Хорошая ide
Anonymous
Даже отличная
Aiwan \ (•◡•) / _bot
Даже отличная
а радасм тогда как охарактеризуешь?
Anonymous
Не знаю такое
Anonymous
Глупые вопросы
Aiwan \ (•◡•) / _bot
Глупые вопросы
тогда скажи, есть ли какая нибудь иде полностью написанная на асме?
Anonymous
А не из чего она сделана вопрос не в пафосе а в удобстве
Ask
радасм имхо удобнее, и редакто ресурсов есть для любителей)
Ask
а если писать раз в год проект с 1 файлом то и сасма хватит)
R
привет
R
пишу переключение контекста, после iret вообще все прерывания перестают работать
R
что это?почему так
R
если подробнее : есть обработчик прерывания таймера, он вызывает функцию schedule а она в свою очередь вызывает переключение контекста
R
контекст один раз переключается с главного потока ядра на второй поток и на нем так и остается тк больше вообще никакие прерывания не работают((
Eugene
Если это прерывание от таймера (IRQ0), неплохо бы EOI послать PIC-у.
R
Ask
до
R
спс попробую отпишу как что
Anonymous
Кто знаком с winapi почему я не прочитал mbr?
Anonymous
format PE
use32
include 'C:\fasm\INCLUDE\win32ax.inc'
section '.bss' readable writable
HMBR rd 1
buf rb 512
var1 rd 1
count1 rb 1
bytesread rd 1
section '.text' readable executable
entry _start
filename db '\\\\.\\PhysicalDrive0',0
error_read db '[-] Error read MBR',0x0a,0x00
complete_read db '[+] Complete read mbr',0x0a,'[*] MBR: ',0x00
msg db '%002X ',0x00
_start:
invoke CreateFile,filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0
cmp eax,0x00
jz error_open
mov dword ptr HMBR,eax
invoke SetFilePointer,HMBR,0x00,0x00,FILE_BEGIN
invoke ReadFile,HMBR,buf,512,bytesread,0x00
cmp eax,0x00
jz Comp_read
invoke printf,error_read
jmp near return
Comp_read:
invoke printf,complete_read
cld
lea esi,[buf]
mov ecx,512
mov byte ptr count1,0x00
.lp:
lodsb
movzx eax,al
mov dword [var1],eax
cmp byte ptr count1,0x0c
jnz .continue
mov byte ptr count1,0x00
invoke putchar,0x0a
.continue:
inc byte ptr count1
mov eax,dword [var1]
cinvoke printf,msg,eax
loop .lp
error_open:
jmp short continue
error_open_msg db '[-] Error open PhysicalDriver0',0x0a,0x00
continue:
invoke printf,error_open_msg
jmp short @f
return:
invoke CloseHandle,HMBR
@@:
invoke ExitProcess,0x00
section '.code' import data readable executable
library Kernel32,'Kernel32.dll',\
msvcrt,'msvcrt.dll',\
user32,'user32.dll'
import Kernel32,\
ExitProcess,'ExitProcess',\
CreateFile,'CreateFileA',\
CloseHandle,'CloseHandle',\
ReadFile,'ReadFile',\
WriteFile,'WriteFile',\
SetFilePointer,'SetFilePointer'
import msvcrt,printf,'printf',putchar,'putchar'
Eugene
А ты от админа запускаешь прогу?
Anonymous
Да
Anonymous
Вот такой результат
Anonymous
00 00 00 58 30 00 00 00 00 00 00
00 00 00 00 3C 30 00 00 70 30 00 00
D0 30 00 00 00 00 00 00 00 00 00 00
4A 30 00 00 DC 30 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 4B 65 72 6E 65 6C 33 32
2E 64 6C 6C 00 00 6D 73 76 63 72 74
2E 64 6C 6C 00 00 00 00 88 30 00 00
96 30 00 00 A4 30 00 00 B2 30 00 00
BE 30 00 00 00 00 00 00 F0 58 D6 75
A0 3E D6 75 50 3C D6 75 30 42 D6 75
C0 42 D6 75 00 00 00 00 00 00 45 78
69 74 50 72 6F 63 65 73 73 00 00 00
43 72 65 61 74 65 46 69 6C 65 41 00
00 00 43 6C 6F 73 65 48 61 6E 64 6C
65 00 00 00 52 65 61 64 46 69 6C 65
00 00 00 00 53 65 74 46 69 6C 65 50
6F 69 6E 74 65 72 00 00 E8 30 00 00
F2 30 00 00 00 00 00 00 70 4F 56 75
E0 3C 56 75 00 00 00 00 00 00 70 72
69 6E 74 66 00 00 00 00 70 75 74 63
68 61 72 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
00 0
Anonymous
Вот нету здесь 0x55aa
Eugene
А результат функция-то какой возвращает?
s54820
format PE
use32
include 'C:\fasm\INCLUDE\win32ax.inc'
section '.bss' readable writable
HMBR rd 1
buf rb 512
var1 rd 1
count1 rb 1
bytesread rd 1
section '.text' readable executable
entry _start
filename db '\\\\.\\PhysicalDrive0',0
error_read db '[-] Error read MBR',0x0a,0x00
complete_read db '[+] Complete read mbr',0x0a,'[*] MBR: ',0x00
msg db '%002X ',0x00
_start:
invoke CreateFile,filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0
cmp eax,0x00
jz error_open
mov dword ptr HMBR,eax
invoke SetFilePointer,HMBR,0x00,0x00,FILE_BEGIN
invoke ReadFile,HMBR,buf,512,bytesread,0x00
cmp eax,0x00
jz Comp_read
invoke printf,error_read
jmp near return
Comp_read:
invoke printf,complete_read
cld
lea esi,[buf]
mov ecx,512
mov byte ptr count1,0x00
.lp:
lodsb
movzx eax,al
mov dword [var1],eax
cmp byte ptr count1,0x0c
jnz .continue
mov byte ptr count1,0x00
invoke putchar,0x0a
.continue:
inc byte ptr count1
mov eax,dword [var1]
cinvoke printf,msg,eax
loop .lp
error_open:
jmp short continue
error_open_msg db '[-] Error open PhysicalDriver0',0x0a,0x00
continue:
invoke printf,error_open_msg
jmp short @f
return:
invoke CloseHandle,HMBR
@@:
invoke ExitProcess,0x00
section '.code' import data readable executable
library Kernel32,'Kernel32.dll',\
msvcrt,'msvcrt.dll',\
user32,'user32.dll'
import Kernel32,\
ExitProcess,'ExitProcess',\
CreateFile,'CreateFileA',\
CloseHandle,'CloseHandle',\
ReadFile,'ReadFile',\
WriteFile,'WriteFile',\
SetFilePointer,'SetFilePointer'
import msvcrt,printf,'printf',putchar,'putchar'
Там бэкслэшей в имени диска от души. А должно быть три. И дальше там указатель вместо хэндла в ReadFile и в SetFilePointer.
Anonymous
Да я посмотрел столько люди и используют слешей
Anonymous
Anonymous
Да дублируются
Eugene
А в асме нет, поэтому в 2 раза меньше пиши.
Anonymous
а ну да
Anonymous
filename db '\\.\PhysicalDrive0',0
Anonymous
все равно также
Leon
А у тебя случайно не gpt?
Anonymous
Нет mbr
Передайте (кто может и кому интересно), что тип разметки не зависит от [не]успешности считывания первых 512 байт с накопителя: даже если там gpt, то должны быть и 55aa, и валидный раздел на весь накопитель (так называемая protective mbr record, для обратной совместимости с mbr-only софтом, чтобы дел нехороших с диском не натворить).
s54820
Anonymous
Наверное надо использовать virtalloc
s54820
Наверное надо использовать virtalloc
Среди прочих проблем, ecx не сохраняется вызываемыми функциями, поэтому loop входит во вкус и повторяется сильно дольше, чем ему сказано.
Eugene
Добрался до твоего исходника. Давай по порядку...
1. В случае ошибки CreateFile возвращается не 0, а INVALID_HANDLE_VALUE.
Anonymous
Да
Anonymous
Но у меня 0
Eugene
Инвалид... = -1, почему у тебя 0 ?
Eugene
2. Т.к. это начало диска (файла, так сказать), то
invoke SetFilePointer,HMBR,0x00,0x00,FILE_BEGIN
делать необязательно. Хотя тут бы я, конечно, уточнил у других людей, но по логике должно быть так. Уверен на 99.999999999%, что так :))
Eugene
3. Не
invoke ReadFile,HMBR,buf,512,bytesread,0x00 — тут ты передаёшь АДРЕС хендла, а не хендл
а
invoke ReadFile,[HMBR],buf,512,bytesread,0x00
Eugene
cmp eax,0x00, кстати, можно сократить до test eax,eax, но это уже лирика, а не суть.
Eugene
4. А вот суть:
cmp eax,0x00
jz Comp_read
как раз в случае нуля это ошибка, а надо jnz
Eugene
5. Про ecx уже сказали, так что меняй на ebx, а loop — на
dec ebx
jnz .lp
Eugene
ой
Eugene
вот так, исправил
Eugene
У меня всё работает (с ипсравлениями)
Anonymous
а ну да)
Anonymous
у меня не открывается
Anonymous
format PE
use32
include 'C:\fasm\INCLUDE\win32ax.inc'
section '.bss' readable writable
HMBR rd 1
buf rb 512
var1 rd 1
count1 rb 1
bytesread rd 1
section '.text' readable executable
entry _start
filename db '\\.\PhysicalDrive0',0
error_read db '[-] Error read MBR',0x0a,0x00
complete_read db '[+] Complete read mbr',0x0a,'[*] MBR: ',0x00,0x0a
msg db '%002X ',0x00
_start:
invoke CreateFile,filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0
test eax,eax
jnz error_open
mov dword ptr HMBR,eax
invoke SetFilePointer,HMBR,0x00,0x00,FILE_BEGIN
invoke ReadFile,[HMBR],buf,512,bytesread,0x00
cmp eax,0x00
jz Comp_read
invoke printf,error_read
jmp near return
Comp_read:
invoke printf,complete_read
cld
lea esi,[buf]
mov bx,512
mov byte ptr count1,0x00
.lp:
lodsb
movzx eax,al
mov dword [var1],eax
cmp byte ptr count1,0x0c
jnz .continue
mov byte ptr count1,0x00
invoke putchar,0x0a
.continue:
inc byte ptr count1
dec bx
mov eax,dword [var1]
cinvoke printf,msg,eax
test bx,bx
jnz .lp
error_open:
jmp short continue
error_open_msg db '[-] Error open PhysicalDriver0',0x0a,0x00
continue:
invoke printf,error_open_msg
return:
invoke CloseHandle,[HMBR]
invoke ExitProcess,0x00
section '.code' import data readable executable
library Kernel32,'Kernel32.dll',\
msvcrt,'msvcrt.dll',\
user32,'user32.dll'
import Kernel32,\
ExitProcess,'ExitProcess',\
CreateFile,'CreateFileA',\
CloseHandle,'CloseHandle',\
ReadFile,'ReadFile',\
WriteFile,'WriteFile',\
SetFilePointer,'SetFilePointer'
import msvcrt,printf,'printf',putchar,'putchar'
Anonymous
[-] Error open PhysicalDriver0
Anonymous
а блин*
Eugene
Пилять... см. п.1 :)
Eugene
У тебя всё, что не 0 после CreateFile летит в error. Хоть нормальный хендл, хоть инвалид_хендл_велью.
Anonymous
format PE
use32
include 'C:\fasm\INCLUDE\win32ax.inc'
section '.bss' readable writable
HMBR rd 1
buf rb 512
var1 rd 1
count1 rb 1
bytesread rd 1
section '.text' readable executable
entry _start
filename db '\\.\PhysicalDrive0',0
error_read db '[-] Error read MBR',0x0a,0x00
complete_read db '[+] Complete read mbr',0x0a,'[*] MBR: ',0x00,0x0a
msg db '%002X ',0x00
_start:
invoke CreateFile,filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0
test eax,eax
jz error_open
mov dword ptr HMBR,eax
invoke SetFilePointer,HMBR,0x00,0x00,FILE_BEGIN
invoke ReadFile,[HMBR],buf,512,bytesread,0x00
cmp eax,0x00
jnz Comp_read
invoke printf,error_read
jmp near return
Comp_read:
invoke printf,complete_read
cld
lea esi,[buf]
mov bx,512
mov byte ptr count1,0x00
.lp:
lodsb
movzx eax,al
mov dword [var1],eax
cmp byte ptr count1,0x0c
jnz .continue
mov byte ptr count1,0x00
invoke putchar,0x0a
.continue:
inc byte ptr count1
dec bx
mov eax,dword [var1]
cinvoke printf,msg,eax
test bx,bx
jnz .lp
jmp short return
error_open:
jmp short continue
error_open_msg db '[-] Error open PhysicalDriver0',0x0a,0x00
continue:
invoke printf,error_open_msg
return:
invoke CloseHandle,[HMBR]
invoke ExitProcess,0x00
section '.code' import data readable executable
library Kernel32,'Kernel32.dll',\
msvcrt,'msvcrt.dll',\
user32,'user32.dll'
import Kernel32,\
ExitProcess,'ExitProcess',\
CreateFile,'CreateFileA',\
CloseHandle,'CloseHandle',\
ReadFile,'ReadFile',\
WriteFile,'WriteFile',\
SetFilePointer,'SetFilePointer'
import msvcrt,printf,'printf',putchar,'putchar'
Anonymous
есть ура
Anonymous
это моя рассеяность и моя
Eugene
Пость лучше через pastebin или т.п. А то такие портянки длинные...
Anonymous
концентрация
Anonymous
ок
Eugene
Опять
test eax,eax
jz error_open
вот!
cmp eax,INVALID_HANDLE_VALUE
je error_open
Eugene
invoke SetFilePointer,HMBR,0x00,0x00,FILE_BEGIN
здесь тоже [HMBR] надо
Anonymous
я думал указатель
Eugene
dec ebx
...
test bx,bx
jnz .lp
это избыточно (и почему bx?)...
просто в конце:
dec ebx
jnz .lp