Есть ли что-то как Linux ptrace syscall в Windows?

Да, это похоже на ошибку.

В соответствии со стандартом - 9.11.2:

1 Спецификатор выравнивания может быть применен к переменной или к элементу данных класса, но не должен применяться к битовому полю. , параметр функции или объявление-исключение (13.3). Спецификатор выравнивания может также применяться к объявлению класса (в подробном спецификаторе типа (9.1.7.3) или заголовке класса (раздел 10), соответственно) и к объявлению перечисления (в непрозрачном enum-декларация или enum-head соответственно (9.6)). Спецификатор выравнивания с многоточием является расширением пакета (12.6.3).

перечисления также должны быть выровнены.

UBSan также жалуется:

/usr/include/c++/8.3.0/ext/new_allocator.h:136: runtime error: store to misaligned address 0x602000000031 for type 'byte_enum', which requires 16 byte alignment
0x602000000031: note: pointer points here
 00 80 58  be be 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00
              ^ 
/usr/include/c++/8.3.0/bits/stl_iterator.h:797:17: runtime error: reference binding to misaligned address 0x602000000031 for type 'byte_enum', which requires 16 byte alignment
0x602000000031: note: pointer points here
 00 80 58  01 02 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00
              ^ 
/usr/include/c++/8.3.0/bits/stl_vector.h:1033:20: runtime error: reference binding to misaligned address 0x602000000031 for type 'value_type', which requires 16 byte alignment
0x602000000031: note: pointer points here
 00 80 58  01 02 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00
              ^ 
0x602000000050
0x602000000051
0x602000000052

Это может быть ошибкой libstdc ++ std::vector, потому что использование массива прекрасно работает с UBSan:

    {//with enum
        std::array<byte_enum, 3> bytes = { byte_enum{1}, byte_enum{2}, byte_enum{3} };
        for(auto it = bytes.begin(); it!= bytes.end(); ++it) {
                std::cout<<&*it<<std::endl;
        }
    }
7
задан Community 23 May 2017 в 10:32
поделиться

1 ответ

Вы можете использовать ETW для отслеживания системных вызовов. При запуске трассировки в EVENT_TRACE_PROPERTIES вы можете добавить флаг EVENT_TRACE_FLAG_SYSTEMCALL в EnableFlags. Это включает события SysCallEnter и SysCallLeave, как описано здесь .

3
ответ дан 7 December 2019 в 16:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: