Visual Studio 2022 не видит MASM файл

Тема в разделе "WASM.HEAP", создана пользователем rxznve, 13 авг 2023.

Метки:
  1. rxznve

    rxznve New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2023
    Сообщения:
    14
    Доброго времени суток!

    Есть одно решение, в котором находятся три проекта.

    При попытке компиляции проекта Bridge появляется следующая ошибка
    unresolved external symbol NtQueryInformationProcess

    Функции NtQueryInformationProcess объявлена в файле syscalls_all.h
    Реализация функции находится в syscalls_all_-asm.x64.asm

    Структура решения
    D:\Projects\Solution:
    │   Solution.sln
    ├───Additional
    │      ├───Build Events
    │      │       Post-Build.bat
    │      │
    │      └───Include
    │              ├───lazy_importer
    │              │       lazy_importer.hpp
    │              │
    │              ├───syscalls
    │              │       syscalls_all.c
    │              │       syscalls_all.h
    │              │       syscalls_all_-asm.x64.asm
    │              │
    │              └───xorstr
    │                     xorstr.hpp

    ├───Bridge
    │       Bridge.def
    │       Bridge.rc
    │       Bridge.vcxproj
    │       Bridge.vcxproj.filters
    │       Bridge.vcxproj.user
    │       DllMain.cpp

    ├───Loader
    │       Loader.rc
    │       Loader.vcxproj
    │       Loader.vcxproj.filters
    │       Loader.vcxproj.user
    │       Main.cpp

    └───Overlay
            DllMain.cpp
            Overlay.rc
            Overlay.vcxproj
            Overlay.vcxproj.filters
            Overlay.vcxproj.user


    Часть кода Bridge.cpp
    #include "syscalls/syscalls_all.h"

    В настройках проекта Bridge указал путь к Additional Include Directories
    $(SolutionDir)Additional\Include\

    В Build Dependencies во всех трёх проектах выбрал поддержку masm.

    Очень не хотелось бы копировать этот файл во все три проекта (тогда видит),
    нельзя ли как-то прописать путь к папке как с #include?
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    Ошибка возникает из-за того, что в проект Bridge не линкуется ассемблерный файл. Ты подключаешь хедер, но линкер не знает, где искать реализацию.
    Здесь возможно два решения:
    1. Сделать Additional отдельный проектом: создать для него vcxproj в виде статической библиотеки, которая будет собирать ассемблерный файлик, и подключать эту библиотеку как зависимость в других проектах, используя "Ссылки":
    upload_2023-8-13_22-52-20.png
    2. Не копировать .asm в каждый проект, как ты предложил выше, а оставить его в Additional, но подключить в каждый нужный проект (в частности, в Bridge) как обычный исходник - т.е., asm останется в Additional, но на него будут ссылаться другие проекты.

    Я бы выбрал первый вариант как самый идиоматичный.
     
    rxznve нравится это.
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    если ещё заморочиться, то можно скрипт на питохе сделать, чтоб он собирал масмом либу и линковал бы её к проекту студии. :)
     
  4. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    А пример поподробнее и попонятнее можно? Или как всегда информация из википедии, и на практике никогда не применялась? :)
     
  5. rxznve

    rxznve New Member

    Публикаций:
    0
    Регистрация:
    27 фев 2023
    Сообщения:
    14
    HoShiMin, UbIvItS, В итоге сделал немного по другому, создал новый проект, добавил туда все файлы из папки syscalls и собрал как библиотеку которую в итоге подключил ко всем проектам без дополнительного копирования. Что-то забыл что так можно, всем спасибо!)
     
    UbIvItS нравится это.
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    ежли линь, то сращивание питохи с башем примерно так выглядит ..
    cmd = f"g++ {cpp_flags} -o {bin_name} {sources}"
    os.system(cmd)
     
  7. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    UbIvItS, вы гений! Объясните поподробней про VS 2022 и MASM на Linux, чтобы, вообще, не осталось сомневающихся в этом вопросе. :)
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    чой-то тебе совсем нечем по житуХЕ заняться.. окромя срачей :) под вынью - py + powershell + pywin32 и будет тебе счастье :secret::grin:
     
    TrashGen нравится это.
  9. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    458
    пайтунг неродная гавань виндавозников
    посему - мейкфайл наше фсе
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    сборка/отладка/отчёты - мейкфайл попрёт для сборки, но весь прикол питохи - возможность соорудить единую экосистему разработки. :)