1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 11:54:57 +00:00

disasm: Port to LibMain

This commit is contained in:
Lucas CHOLLET 2022-01-13 20:54:35 +01:00 committed by Idan Horowitz
parent 1716105e73
commit affef5d1a9
3 changed files with 9 additions and 13 deletions

View file

@ -478,7 +478,7 @@ if (BUILD_LAGOM)
add_executable(disasm_lagom ../../Userland/Utilities/disasm.cpp) add_executable(disasm_lagom ../../Userland/Utilities/disasm.cpp)
set_target_properties(disasm_lagom PROPERTIES OUTPUT_NAME disasm) set_target_properties(disasm_lagom PROPERTIES OUTPUT_NAME disasm)
target_link_libraries(disasm_lagom LagomCore LagomELF LagomX86) target_link_libraries(disasm_lagom LagomCore LagomELF LagomX86 LagomMain)
add_executable(gml-format_lagom ../../Userland/Utilities/gml-format.cpp) add_executable(gml-format_lagom ../../Userland/Utilities/gml-format.cpp)
set_target_properties(gml-format_lagom PROPERTIES OUTPUT_NAME gml-format) set_target_properties(gml-format_lagom PROPERTIES OUTPUT_NAME gml-format)

View file

@ -84,7 +84,7 @@ target_link_libraries(ddate LibMain)
target_link_libraries(df LibMain) target_link_libraries(df LibMain)
target_link_libraries(diff LibDiff LibMain) target_link_libraries(diff LibDiff LibMain)
target_link_libraries(dirname LibMain) target_link_libraries(dirname LibMain)
target_link_libraries(disasm LibX86) target_link_libraries(disasm LibX86 LibMain)
target_link_libraries(dmesg LibMain) target_link_libraries(dmesg LibMain)
target_link_libraries(du LibMain) target_link_libraries(du LibMain)
target_link_libraries(echo LibMain) target_link_libraries(echo LibMain)

View file

@ -11,11 +11,12 @@
#include <LibCore/ArgsParser.h> #include <LibCore/ArgsParser.h>
#include <LibCore/MappedFile.h> #include <LibCore/MappedFile.h>
#include <LibELF/Image.h> #include <LibELF/Image.h>
#include <LibMain/Main.h>
#include <LibX86/Disassembler.h> #include <LibX86/Disassembler.h>
#include <LibX86/ELFSymbolProvider.h> #include <LibX86/ELFSymbolProvider.h>
#include <string.h> #include <string.h>
int main(int argc, char** argv) ErrorOr<int> serenity_main(Main::Arguments args)
{ {
const char* path = nullptr; const char* path = nullptr;
@ -24,15 +25,9 @@ int main(int argc, char** argv)
"Disassemble an executable, and show human-readable " "Disassemble an executable, and show human-readable "
"assembly code for each function."); "assembly code for each function.");
args_parser.add_positional_argument(path, "Path to i386 binary file", "path"); args_parser.add_positional_argument(path, "Path to i386 binary file", "path");
args_parser.parse(argc, argv); args_parser.parse(args);
auto file_or_error = Core::MappedFile::map(path); auto file = TRY(Core::MappedFile::map(path));
if (file_or_error.is_error()) {
warnln("Could not map file: {}", file_or_error.error());
return 1;
}
auto& file = *file_or_error.value();
struct Symbol { struct Symbol {
size_t value; size_t value;
@ -46,8 +41,8 @@ int main(int argc, char** argv)
}; };
Vector<Symbol> symbols; Vector<Symbol> symbols;
const u8* asm_data = (const u8*)file.data(); const u8* asm_data = (const u8*)file->data();
size_t asm_size = file.size(); size_t asm_size = file->size();
size_t file_offset = 0; size_t file_offset = 0;
Vector<Symbol>::Iterator current_symbol = symbols.begin(); Vector<Symbol>::Iterator current_symbol = symbols.begin();
OwnPtr<X86::ELFSymbolProvider> symbol_provider; // nullptr for non-ELF disassembly. OwnPtr<X86::ELFSymbolProvider> symbol_provider; // nullptr for non-ELF disassembly.
@ -131,4 +126,5 @@ int main(int argc, char** argv)
outln("{:p} {}", virtual_offset, insn.value().to_string(virtual_offset, symbol_provider)); outln("{:p} {}", virtual_offset, insn.value().to_string(virtual_offset, symbol_provider));
} }
return 0;
} }