| libmiasmaelf. libmiasmaelf é uma biblioteca para gerar arquivos de objeto relocatable que estão em conformidade com o formato ELF. |
Baixe Agora |
libmiasmaelf. Classificação e resumo
- Nome do editor:
- Hareesh Nagarajan
- Site do editor:
- http://puggy.symonds.net/~hareesh/kidwai/
libmiasmaelf. Tag
libmiasmaelf. Descrição
libmiASMaELF é uma biblioteca para geração de arquivos de objetos relocáveis que estejam em conformidade com o formato ELF. libmiASMaELF é uma biblioteca para geração de arquivos de objetos relocáveis que estejam em conformidade com a biblioteca ELF format.libmiASMaELF não tem hierarquia de classes complexa, portanto, é extemamente fácil de usar, ao contrário da maioria outras bibliotecas que realizar a mesma tarefa. Documentação e exemplos são fornecidos para demonstrar o uso da biblioteca. Como se usar a biblioteca? / * hello.c * / # include #include #include "libmiasmaelf.h "int main (void) {text char [] = { 'XB8', 'x04', 'x00', 'x00', 'x00', // mov eax, 4 'xbb', 'x01', 'x00' 'x00', 'x00', // ebx mov, 1 'xB9', 'x00', 'x00', 'x00', 'x00', // mov ecx, myVariable 'Xba', 'X0e', ' x00' , 'x00', 'x00', // mov edx, 14 'XCD', 'x80', // int 0x80 'XB8', 'x01', 'x00', 'x00', 'x00', / / mov eax, 1 'XCD', 'X80' // int 0x80}; dados char [] = { 'x48', 'x65', 'x6C', 'x6C', 'x6F', 'X2C', 'X20', 'x57', 'x6F', 'x 72', 'x6C', 'x64', 'x21', 'x0A'}; //Olá Mundo! vector vtext (texto , texto ); vector vData (dados , de dados ); miasmaELF obj; obj.InitializeELFHeader (); obj.InitializeSymbolTable (); obj.AddNewSection (, SHT_STRTAB, 0,0,0,0,0,0 "shstrtab."); obj.AddNewSection ( "texto", SHT_PROGBITS, 6,0,0,0,16,0); obj.AddNewSection (, SHT_PROGBITS, 3,0,0,0,16,0 "de dados."); obj.AddNewSection (, SHT_SYMTAB, 0,0, obj.GetSectionIndexOfType (SHT_STRTAB, ".strtab"), 0, 4, sizeof (Elf32_Sym) "symtab."); obj.AddNewSection (, SHT_REL, 0,0, obj.GetSectionIndexOfType (SHT_SYMTAB), obj.GetSectionIndexOfType (SHT_PROGBITS, ".text"), 4, sizeof (Elf32_Rel) "rel.text."); obj.AddContents (vtext, obj.GetSectionIndexOfType (SHT_PROGBITS, "texto.")); obj.AddContents (vData, obj.GetSectionIndexOfType (SHT_PROGBITS, "dados.")); obj.AddSymbol ( "_ começar", 0,0, STB_WEAK, STT_FUNC, obj.GetSectionIndexOfType (SHT_PROGBITS ".text")); obj.AddSymbol ( "myVariable", 0,0, STB_GLOBAL, STT_OBJECT, obj.GetSectionIndexOfType (SHT_PROGBITS, ".data")); obj.AddRelocationEntry (11, obj.ReturnSymbolIndex ( "myVariable"), R_386_RELATIVE, obj.GetSectionIndexOfType (SHT_REL, ".rel.text")); obj.PrepareFile (); obj.WriteFile ( "hello.o"); } A biblioteca faz uso extensivo de vetores - uma estrutura de dados que é uma parte da Standard Template Library. Primeiro criamos os equivalentes em linguagem de máquina de todas as instruções e preencher os vetores em conformidade. Em seguida, inicializar o ELFHeader, o SymbolTable Inicialização segue em seguida. Isso é feito depois de definir um objecto do tipo miasmaELF. Em seguida, ir para inicializar seções individuais. A função obj.GetSectionIndexOfType (SHT_PROGBITS, ".text") é utilizado quando se deseja obter o SectionIndex de uma determinada secção. Encontramos esta função ajuda muito na ligação entre as várias estruturas que são descritos no elf.h. Aqui, ele é usado na construção do cabeçalho da seção de uma seção particular. É imperativo que o usuário da biblioteca deve ter uma idéia geral das várias estruturas que estão envolvidos. Nós então invocar obj.AddContents (vtext, obj.GetSectionIndexOfType (SHT_PROGBITS, "texto.")); que adicionar o conteúdo para a seção de texto. O 2º argumento para AddContents é a seção que estamos nos referindo. Neste caso, é a seção .text, e do nosso exemplo, o Índice = 3. Nós empregamos uma técnica semelhante para adicionar símbolos e inscrições Relocation. Para escrever, finalmente, a um arquivo deve primeiro deve prepará-lo invocando a função PrepareFile (...), e só então invocar WriteFile (FileName) Para compilar hello.c é preciso vinculá-lo com libmiasmaelf.o
libmiasmaelf. Software Relacionado