IACA и Rust

Есть такой интересный инструмент у Intel - Intel® Architecture Code Analyzer (IACA). Это статический анализатор и служит для профилирования бинарного кода на платформах Intel. Работает по сути очень просто: в начало и конец исследуемого блока надо включить вставки. Для языка Си или ассемблера вставки описаны в документации, а для rust ничего нет.

Как оказалось, это не так сложно. Во первых. ассемблерные вставки возможны в nightly сборках rust. Ну, и нужно помечать файл #![feature(asm)].

// IACA START
unsafe {
    asm!("mov ebx, 111" : : : : "intel");
    asm!(".byte 0x64, 0x67, 0x90");
}
 
let x = 10f32;
let y = x * x;
 
// IACA STOP
unsafe {
    asm!("mov ebx, 222" : : : : "intel");
    asm!(".byte 0x64, 0x67, 0x90");
}
 

После вставок бинарник будет (скорее всего) нерабочим, но доступным для статического анализа инструментом IACA.


2019-12-12