Ejemplo n.º 1
0
void test_write_elf() {
	asm_p as = &(asm_t){ 0 };
	as_new(as);
	
	const char* text_ptr = "Hello World!\n";
	size_t text_len = strlen(text_ptr);
	size_t text_vaddr = as_data(as, text_ptr, text_len);
	
	as_mov(as, RAX, imm(1));  // wirte
	as_mov(as, RDI, imm(1));  // stdout
	as_mov(as, RSI, imm(text_vaddr));  // text ptr
	as_mov(as, RDX, imm(text_len));    // text len
	as_syscall(as);
	
	as_mov(as, RAX, imm(60));  // exit
	as_mov(as, RDI, imm(1));   // exit code
	as_syscall(as);
	
	as_save_elf(as, "test_write_elf.elf");
	as_destroy(as);
	
	char* output = NULL;
	int status_code = run_and_delete("test_write_elf.elf", "./test_write_elf.elf", &output);
	
	st_check_int(status_code, 1);
	st_check_str(output, text_ptr);
	
	free(output);
}
Ejemplo n.º 2
0
void test_write_elf() {
	asm_p as = &(asm_t){ 0 };
	size_t code_vaddr = 4 * 1024 * 1024;
	size_t data_vaddr = 512 * 1024 * 1024;
	
	const char* text_ptr = "Hello World!\n";
	size_t text_len = strlen(text_ptr);
	size_t text_offset = as_data(as, text_ptr, text_len);
	
	// mov RAX, 1   // write syscall
	as_write(as, "0100 000B : 1011 wrrr :  %8d", 0, 0, 0b000, 1);
	// mov RDI, 1   // stdout,             RDI = R7 = 0b0111
	as_write(as, "0100 000B : 1011 wrrr :  %8d", 0, 0, 0b111, 1);
	// mov RSI, text_vaddr   // text_ptr,  RSI = R6 = 0b0110
	as_write(as, "0100 000B : 1011 wrrr : %32d", 0, 1, 0b110, data_vaddr + text_offset);
	// mov RDX, text_len     // text len,  RDX = R2 = 0b0010
	as_write(as, "0100 000B : 1011 wrrr : %32d", 0, 1, 0b010, text_len);
	// syscall
	as_write(as, "0000 1111 : 0000 0101");
	
	// mov RAX, 60  // exit syscall
	as_write(as, "0100 000B : 1011 wrrr :  %8d", 0, 0, 0b000, 60);
	// mov RDI, 1   // exit code,          RDI = R7 = 0b0111
	as_write(as, "0100 000B : 1011 wrrr :  %8d", 0, 0, 0b111, 1);
	// syscall
	as_write(as, "0000 1111 : 0000 0101");
	
	as_save_elf(as, code_vaddr, data_vaddr, "test_write_elf.elf");
	as_free(as);
	
	char* output = NULL;
	int status_code = run_and_delete("test_write_elf.elf", "./test_write_elf.elf", &output);
	
	st_check_int(status_code, 1);
	st_check_str(output, text_ptr);
	
	free(output);
}
Ejemplo n.º 3
0
 operator   Data()                                   { return as_data();       }