mirror of
https://github.com/tsoding/good_training_language.git
synced 2026-09-12 19:50:53 +05:00
Устранить предупреждения.
This commit is contained in:
parent
ab0ff4ed39
commit
f93bb2f5de
@ -258,17 +258,58 @@ const КОМАНДЫ: &[Команда] = &[
|
||||
},
|
||||
Команда {
|
||||
имя: "объект",
|
||||
сигнатура: "<путь_к_файлу>",
|
||||
сигнатура: " [-цель <цель>] <путь_к_файлу>",
|
||||
описание: "Сгенерировать объектный файл, который можно скомпоновать со статическими библиотеками.",
|
||||
запустить: |программа, mut аргы| {
|
||||
let путь_к_файлу = if let Some(путь_к_файлу) = аргы.next() {
|
||||
PathBuf::from(путь_к_файлу)
|
||||
let mut файл_вывода = None;
|
||||
let mut цель = Цель::ЛинуксИкс86_64Фазм;
|
||||
|
||||
loop {
|
||||
match аргы.next() {
|
||||
Some(арг) => match арг.as_str() {
|
||||
"-цель" => {
|
||||
match аргы.next() {
|
||||
Some(арг) => match арг.as_str() {
|
||||
"эльф" => цель = Цель::ЛинуксИкс86_64Эльф,
|
||||
"фазм" => цель = Цель::ЛинуксИкс86_64Фазм,
|
||||
_ => {
|
||||
eprintln!("ОШИБКА: неизвестная цель «{арг}»");
|
||||
// СДЕЛАТЬ: напечатать список возможных целей
|
||||
return Err(())
|
||||
}
|
||||
}
|
||||
None => {
|
||||
eprintln!("ОШИБКА: Флаг «{арг}» требует значение.");
|
||||
return Err(())
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
if файл_вывода.is_some() {
|
||||
пример(программа);
|
||||
eprintln!("ОШИБКА: Неизвестный флаг «{арг}».");
|
||||
return Err(())
|
||||
} else {
|
||||
файл_вывода = Some(арг)
|
||||
}
|
||||
}
|
||||
}
|
||||
None => break,
|
||||
}
|
||||
}
|
||||
|
||||
let файл_вывода = if let Some(файл_вывода) = аргы.next() {
|
||||
PathBuf::from(файл_вывода)
|
||||
} else {
|
||||
пример(программа);
|
||||
eprintln!("ОШИБКА: требуется путь к файлу!");
|
||||
return Err(());
|
||||
};
|
||||
фазм::сгенерировать_объектный_файл(&путь_к_файлу)
|
||||
|
||||
match цель {
|
||||
Цель::ЛинуксИкс86_64Фазм => фазм::сгенерировать_объектный_файл(&файл_вывода),
|
||||
Цель::ЛинуксИкс86_64Эльф => эльф::сгенерировать_объектный_файл(&файл_вывода),
|
||||
}
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
@ -27,7 +27,6 @@ const ЭЛЬФ_ТЕКУЩАЯ_ВЕРСИЯ: usize = 1; // EV_CURRENT
|
||||
const ЭЛЬФ64_РАЗМЕР_ЭЛЬФ_ЗАГОЛОВКА: usize = 64; // sizeof(Elf64_Ehdr)
|
||||
const ЭЛЬФ64_РАЗМЕР_ПРОГ_ЗАГОЛОВКА: usize = 56; // sizeof(Elf64_Phdr)
|
||||
const ЭЛЬФ64_РАЗМЕР_СЕКЦ_ЗАГОЛОВКА: usize = 64; // sizeof(Elf64_Shdr)
|
||||
const ЭЛЬФ64_РАЗМЕР_ЗАПИСИ_СИМВОЛА: usize = 24; // sizeof(Elf64_Sym)
|
||||
|
||||
enum ЭльфТип { // e_type
|
||||
Перемещаемый = 1, // ET_REL
|
||||
@ -328,11 +327,6 @@ pub fn сгенерировать_исполняемый_файл(путь_к_ф
|
||||
}
|
||||
}
|
||||
|
||||
fn выравнять_байты(байты: &mut Vec<u8>, выравнивание: usize) {
|
||||
let новый_размер = (байты.len() + выравнивание - 1)/выравнивание*выравнивание;
|
||||
байты.resize(новый_размер, 0);
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
enum ТипСекции { // sh_type
|
||||
Пустая = 0, // SHT_NULL
|
||||
@ -406,14 +400,11 @@ impl Секция {
|
||||
#[derive(Clone, Copy)]
|
||||
enum ТипСимвола {
|
||||
Никакой = 0, // STT_NOTYPE
|
||||
Функция = 2, // STT_FUNC
|
||||
Секция = 3, // STT_SECTION
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
enum СвязьСимвола {
|
||||
Локальная = 0, // STB_LOCAL
|
||||
Глобальная = 1, // STB_GLOBAL
|
||||
}
|
||||
|
||||
fn символ_инфо(связь: СвязьСимвола, тип: ТипСимвола) -> u8 { // ELF64_ST_INFO(bind, type)
|
||||
|
||||
@ -6,7 +6,6 @@ mkdir -p ./сборка/
|
||||
rustc -o ./сборка/хуяк -g исходники/хуяк.rs
|
||||
|
||||
mkdir -p ./сборка/примеры/
|
||||
|
||||
./сборка/хуяк комп -цель фазм -вывод ./сборка/примеры/01-привет-фазм ./примеры/01-привет.хуя
|
||||
./сборка/хуяк комп -цель фазм -вывод ./сборка/примеры/02-цикл-фазм ./примеры/02-цикл.хуя
|
||||
./сборка/хуяк комп -цель фазм -вывод ./сборка/примеры/03-имя-фазм ./примеры/03-имя.хуя
|
||||
|
||||
Loading…
Reference in New Issue
Block a user