Диск и файлы дирруктории Делаю программу в .com формате, т.к в ассемблер только изучаю, нужно вывести текущий диск и файлы текущей дирректории.. вот 2-ве программки одна на диск, другая на дирректории. Подскажите как их совместить в один код: Code: На получение диска и текущей дирректории CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,ES:CODESG ORG 100H BEGIN: JMP SHORT MAIN ; ----------------------------------------------- PATHNAM DB 65 DUP(' ') ;Имя текущего пути доступа ; ----------------------------------------------- MAIN PROC NEAR MOV AH,19H ;Определить текущий диск INT 21H ADD AL,41H ;Заменить шест.номер MOV DL,AL ; на букву: 0=A, 1=B ... CAL B10DISP ;Выдать номер дисковода, MOV DL,':' CAL B10DISP ; двоеточие, MOV DL,'\' CAL B10DISP ; обратную косую MOV AH,47H ;Получить текущий каталог MOV DL,00 LEA SI,PATHNAM INT 21H A10LOOP: CMP BYTE PTR [SI],0 ;Конец имени пути доступа JE A20 ; да - выйти MOV AL,[SI] ;Выдать на экран MOV DL,AL ; имя пути доступа CALL B10DISP ; побайтно INC SI JMP A10LOOP A20: RET ;Выход в DOS MAIN ENDP B10DISP PROC NEAR MOV AH,02 ;в DL - адрес элемента INT 21H ;Функция вывода на экран RET B10DISP ENDP CODESG ENDS END BEGIN =========================================== Code: На получение файлов в дирректории .model tiny .code org 100h start: pathnam db 65 dup(' ') main proc near mov ah,19h int 21h add al,41h mov dl,al call b10disp mov dl,':' call b10disp mov dl,'\' call b10disp mov ah,47h mov dl,00 lea si,pathnam int 21h a10loop: cmp byte ptr [si],0 je a20 mov al,[si] mov dl,al call b10disp inc si jmp a10loop a20: ret main endp b10disp proc near mov ah,02 int 21h ret b10disp endp ; по умолчанию DTA находится в PSP, но мы можем задать ей другое расположение ; (а можем и работать со старым адресом). вобщем переместим mov ah,1ah mov dx,offset dta int 21h ; FindFirstFile mov ah,4eh mov cx,0110111b ; устанавливаем аттрибуты, какие файлы искать mov dx,offset searchPath int 21h jc quit print_filename: ; имя файла находится по смещению 1Eh в DTA и завершается нулем ; теперь выводим имя найденного файла. сразу отмечу, чтобы не тратить время на ; красивый вывод делаю так: имя файла - последнее поле в DTA, поэтому ставлю ; после DTA символ конца строки DOS "$" и вывожу как строку. mov ah,9h mov dx,offset dta + 1eh int 21h ; перевод на новую строку mov ah,9h mov dx,offset crlf int 21h ; FindNextFile mov ah,4fh mov dx,offset dta int 21h jnc print_filename ;если ошибки нет - продолжаем вывод списка файлов, иначе конец программы quit: ;вывод сообщения mov ah,9h mov dx,offset message int 21h ; задержка xor ax,ax int 16h mov ah,4ch int 21h ; data searchPath db "*.*",0 dta db 2ch dup (?) db "$" ;crlf db 13,10,'$' ;новая строка crlf db 0Dh,0Ah,'$' ;аналогично, новая строка message db 'Press any key...','$' end start
Нужно написать конструкцию типа cmp eax,eax je xxxxxxx с помощью опкодов, худо бедно нашел документацию http://ref.x86asm.net/ опкод cmp - 0x3d вопрос а что делать с параметрами, как их записать....
0x3D,0x00,0x00 ; cmp eax,eax 0x74,0x12,0x34,0x56,0x78 ; je 12345678 верно? ------ А вот, картинка, отобразилась, понял.... Но как понять "опкод" оератора - регистра например, тоже задокументировано?
Code: 32-bit general registers EAX is 0, ECX is 1, EDX is 2, EBX is 3, ESP is 4, EBP is 5, ESI is 6, and EDI is 7. Segment registers ES is 0, CS is 1, SS is 2, DS is 3, FS is 4, and GS is 5. Floating-point registers ST0 is 0, ST1 is 1, ST2 is 2, ST3 is 3, ST4 is 4, ST5 is 5, ST6 is 6, and ST7 is 7. 64-bit MMX registers MM0 is 0, MM1 is 1, MM2 is 2, MM3 is 3, MM4 is 4, MM5 is 5, MM6 is 6, and MM7 is 7. Полная версия тут http://courses.engr.illinois.edu/ece390/books/labmanual/inst-ref-opcode-desc.html
как правильно записать je 0x12345678 в опкоде, не могу понять мол есть DWORD address = (DWORD)&lpfnMS; и как представить в виде опкода 0x07 address не получается
Вот что вычитал:"Инструкция условного перехода может осуществлять или нет переход на целевую (указанную в ней) метку, в зависимости от состояния регистра флагов".То есть, как я понял,не получится прыгать на адрес сразу.При использовании условного перехода формируется относительный адрес прыжка.Посмотрев в отладчик можно заметить как он формируется.Если прыгаем вниз то указываем на сколько байтов к примеру прыгаем на адрес ниже нас на 3 байта 0х74 03.Прыгаем на адресс выше нас на 3 байта FF-1байт(0х74)-сколько байт хотим перепрыгнуть 3 = 0x74 FB.Загляните в отладчик и все сразу станет понятно.
Заглядывал!))))) Ну, а что делать, если нужный адресс меняется постоянно? можно сделать, типа исходный адресс - нужный = параметр je?
Читаю ассемблер, но не знаю как реализовать его на практике. Цель у меня для начала написать брутфорс, чем дальше читаю тем больше меня этот язык вводит ступор, есть ли какие пособия, видео курсы, или что подобное для наглядного примера? Если есть заранее благодарен и прошу дать ссылочку на источник.
Брутфорс чего? Если каких-то сетевых ресурсов, то ассемблер нафиг не сдался и его использование не даст преимуществ.
Вообщем проблема возникла у меня в том, что, решил дедики брутить, но большинство брутов плохие или платные решил написать для себя свой, читаю, и у меня совсем ничего не получается.
Ассемблер решил использовать потому что, при компилировании с него выходят мало обьемные EXE - шники прочитал где то что он прекрасен для создания шпионских программ, и подумал написать на чистом ассемблере, но сколько не читаю ничего подобного в нем найти не могу.
Нет смысла изучать асм, если тебе самому не интересно. Гораздо проще будет изучать языки высокого уровня, тем более сейчас. Компиляторы высокого уровня компилят гораздо более оптимизированее, чем ты сам напишешь на асме.