[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Доброго времени суток.
    1)просьба показать пример собственного (програмного) заполнения векторной таблицы прерываний
    2)если это возможно, то и смена местами в таблице аппаратные прерывания Nmi и Intr.
    хотелось бы увидеть часть кода на асме которая отображает вышеизложенное.
    если есть интересные линки по реализации прерываний и их использование на асме буду оч благодарен.
    Заранее спасибо.
     
    _________________________
  2. Cecil B Demented

    Cecil B Demented New Member

    Joined:
    13 Nov 2006
    Messages:
    19
    Likes Received:
    4
    Reputations:
    5
    Хай всем, ребят подскажите плз код простенького на асме - хватание аргументов из командной строки и выполнение их в коммандной строке. У мну аргументы не ловит совсем :( помогите плз :(


    Code:
    C:\masm32\get.exe netstat -a >> C:\log.log
     
  3. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Не понял вопроса, но мб invoke WinExec,...
     
    #403 z01b, 12 Sep 2008
    Last edited: 12 Sep 2008
  4. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    GetCommandLine, откидуешь имя файла, чтоб остались только аргументы(вручную либо CommandLineToArgvW+lstrcatW, либо исчо както). то, что получицо пинаешь в WinExec
     
  5. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    WinExec неудобно использовать вместе с CommandLineToArgvW, потому что нет версии WinExec для юникода.

    Можно использовать следующий код:

    Code:
    .386
    .model flat, stdcall
    option casemap :none
    
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\shell32.inc
    
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\shell32.lib
    
    .data?
    	argc	dd ?
    	st_info	STARTUPINFO <>
            pr_info	PROCESS_INFORMATION <>
    	
    .code
    
    start:
    	invoke GetCommandLineW
    	invoke CommandLineToArgvW, eax, addr argc
    	mov esi, eax
    
    mLoop:
    	dec argc
    	cmp argc, 0
    	je mQuit
    	add esi, 4
    	
    	invoke RtlZeroMemory, addr pr_info, sizeof pr_info
    	invoke RtlZeroMemory, addr st_info, sizeof st_info
    	mov st_info.cb, sizeof st_info
    	mov edx, [esi]
    	
    	invoke CreateProcessW, 0, edx, NULL, NULL, FALSE, 0, NULL, NULL, addr st_info, addr pr_info
    	invoke WaitForSingleObject, pr_info.hProcess, INFINITE
    	invoke CloseHandle, pr_info.hProcess
    	invoke CloseHandle, pr_info.hThread
    	
    	jmp mLoop
    	
    mQuit:
    	invoke ExitProcess, 0
    end start
    
    но тогда запускать надо примерно так:

    Code:
    startproc "netstat /a" >> log.txt
    
     
  6. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    и как CreateProcess должен реагировать, когда получает комманду на запуск >> ? :)
    Code:
    format PE GUI 4.0
    include '%fasminc%/win32a.inc'
    section '.code' code readable writeable executable
    
    fmt     db "%s %ws",0
    szfile  db "12345.bat",0
    entry $
            ;получить и разделить аргументы
            invoke  GetCommandLineW
            push    eax
            invoke  CommandLineToArgvW, eax, esp
    
            lea     esi,[eax+4]
            pop     edi
    
            ;выделить строку под склеенные аргументы
            invoke  VirtualAlloc,0,1000h,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
            mov     ebx,eax
            test    eax,eax
            jz      .exit
    
            ;склеить аргументы(кроме нулевого)
          @@:
            sub     edi,1
            jz      @f
            lodsd
            cinvoke _snprintf,ebx,1000h,fmt,ebx,eax
            jmp     @b
          @@:
    
            ;сздать батник
            add     ebx,1
            sub     esp,sizeof.OFSTRUCT
            invoke  OpenFile,szfile,esp,OF_CREATE
            mov     esi,eax
            add     esp,sizeof.OFSTRUCT
    
            ;записать туда строку
            invoke  lstrlen,ebx
            invoke  WriteFile,esi,ebx,eax,esp,0
            invoke  CloseHandle,esi
    
            ;запустить
            invoke  WinExec,szfile,SW_HIDE
            invoke  VirtualFree,ebx,0,MEM_RELEASE
    
            ;удалить
            invoke  DeleteFile,szfile
          .exit:
            invoke  ExitProcess,0
    
    
    data import
    library kernel32,'KERNEL32.DLL',\
              kernel32w,'KERNEL32.DLL',\
              user32,'USER32.DLL',\
              shell32,'shell32.dll',\
              ntdll,'ntdll.dll'
    
    include '%fasminc%\apia\comdlg32.inc'
    include '%fasminc%\apia\user32.inc'
    include '%fasminc%\apia\kernel32.inc'
    import shell32,\
            CommandLineToArgvW,'CommandLineToArgvW'
    import kernel32w,\
            GetCommandLineW,'GetCommandLineW'
    include '%fasminc%\ntdll.inc'
    end data
     
    1 person likes this.
  7. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    никак, потому что он ее не получает. Можешь проверить, GetCommandLineW возвращает строку без >>


    создавать батник - это уже совсем неоптимально. Например если не будет прав на запись в текущую директорию то утилита не сработает

    использовать VirtualAlloc для выделения небольших объемов памяти не очень правильно, т.к. размер выравнивается по размеру страницы
     
    #407 bons, 13 Sep 2008
    Last edited: 13 Sep 2008
  8. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    насколько йа понимаю >> это жизненно важный оператор в данной строке, который указывает, что надобы записать вывод нетстата в файл. будет ли достигнут этот результат при использовании твоей проги - нет.
    а >> криэтпроцес получает на втором витке цикла.

    а йа вроде и выделяю 4кб строницу, в чем вопрос?

    оптимальнее самому выявлять >, >> и подобные штуки и соответствующим образом на них реагировать?
    сделой, чтоб создовалось в темпе, туда доступ вроде как всегда есть.
     
  9. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    почему не будет? еще как будет;)

    в том что страницы не всегда по 4 кб

    вообще-то >>, > и им подобные выявляет система, так зачем писать лишний код? GetCommandLineW возвращет строку уже без них (если они не были заключены в кавычки) и любые попытки выявить их закончатся неудачей.

    создавать бат-файл вообще нет необходимости
     
    1 person likes this.
  10. Cecil B Demented

    Cecil B Demented New Member

    Joined:
    13 Nov 2006
    Messages:
    19
    Likes Received:
    4
    Reputations:
    5
    bons так же обрывается поток ">>" ну или ">" создаёт пустой файл :(
     
    1 person likes this.
  11. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    Code:
    ;запустить
            invoke  WinExec,szfile,SW_SHOW
    
    это в моем кодесе подправить надо. после этого
    prog.exe "netstat /a > asd.txt"

    создается непустой файл.
     
  12. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    кто чем может помочь по теме
    http://forum.antichat.ru/showpost.php?p=856928&postcount=417
    просьба отписать. очень нужно реализовать замену прерываний. спасибо.
     
    _________________________
  13. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    (1) CSEG segment
    (2) org 100h
    (3) Begin:
    (4) mov ax,0B800h
    (5) mov es,ax
    (6) mov di,0
    (7) mov al,1
    (8) mov ah,31
    (9) mov cx,2000
    (10)
    (11) Next_face:
    (12) mov es:[di],ax
    (13) add di,2
    (14) loop Next_face
    (15)
    (16) mov ah,10h
    (17) int 16h
    (18) int 20h
    (19) CSEG ends
    (20) end Begin

    Вот никуя не фтыкаю,каким раком в 12-ой строке кода заносится не 0B800h (адрес видеобуфера),а ASCII код символа и атрибут его,если в ax УЖЕ сохранен адрес видеобуфера 0B800h ? Загадко =_=
     
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    (4) mov ax,0B800h
    (5) mov es,ax
    Занесет в es значение сегмента видиобуфера.
    после чего тебе уже не важны значения ax
    ну а дальше :
    (12) mov es:[di],ax
    занесет значение AX в cегмент памяти указанный в es(который уже указывает на 0B800h ) по смещению указанном в DI
     
    1 person likes this.
  15. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Я нуб в кодинге и недавно начал учить АССЕМБЛЕР, и появились меня такие вопросы:
    1)Какая команда форматит все диски на харде?
    2)Какая команда сможет вывести анимашка на ВЕСЬ экран и полный отказ клавы и мыши?
    3)Возможно ли написать вирь шоб изменяла настройки биоса?
    Зарание спасибо!!!
     
  16. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Пыщь....
     
  17. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    1.только тебе надо сходить купить партишн магик( в любой ларёк),либо отдельно,либо с "он входит в золотой софт",там есть раздел:Boot загрузка.
    Короче заходи в биос,затем жми по счёту на 3 строку,а дальше на 4(аварийная загрузка) и меняй её с HDD на CD ROM,далее вставляй диск,который купил и у тебя появится строка выбор.Что выбрать:там доктор вэб,ещё что то,и партишн.Выбирай партишн и далее по инструкции,она там по русски.Очень легко всё.Когда разбил на разделы,то вставляй ОСь,ну и далее всё легко вообще.
    Можно сделать и виндой всё но это запарно очень.Там надо ДОС команды знать.А вообще можно диск С снять клавиша там указана и отформатировать.Всего около часа работы.

    ЗЫ..А самый лучший способ отформатировать диск,сбросить его в речку. Ну на краяняк можно топором рубануть по нему со всей дури)) Стопроцентное стирание всех файлов обеспечено!!!

    2.
     
    9 people like this.
  18. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Приветствую вас.

    Киньте исходник мощного парсера если таковой имеется.
     
  19. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    1. Нет такой. Зато есть прямой доступ к венику - по байту затери - и радуйся ))
    2. Запомни, в ассемблере даже подобия нет на writeln и прочие - записавый данные напрямую в видеобуфер.
    3. изменить биос обломаешься.
    4. вирус тебе написать невозможно.
    5. пункт 4 - это диагноз
    6. угробить веник - раскрути, переломай увутренние диски, оторви головку ползунка и перепаяй провода наоборот )
    7. Не за что :cool:
     
  20. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    3. изменить биос обломаешься.

    Все ты знаешь, а как на счет cih95? - была найдена уязвимость и был написан эксплоит (собственно вирус) публика узнала что существует такая уязимость а если существует хакер который нашел брешь в биосе и способен получить доступ на запись