// File: /workspace/github_c_makefile_star2_O0/Astor-Bizard[P]ProjetS5_Groupe2/src/displayCorrectionSymbols.c
// Function: main
int main(int argc, char *argv[])
{
	Elf32_Ehdr Old_elfHeaders, New_elfHeaders;;
	SectionsHeadersList Old_section_headers, New_section_headers;
	ListeSymboles sym_tab,newST;
	Str_Reloc str_reloc;
	Table_Donnees tab_donnees;
	FILE *f_read, *f_write;
	
	if(argc < 3)
	{
		printf("Erreur nombre d'argument :\n\t./displayCorrectionSymbols <fichier_Elf_lecture> <fichier_Elf_ecriture>\n");
		return 1;
	}

	f_read = fopen(argv[1], "r");
	if (f_read == NULL) {
		printf("Fichier introuvable: %s\n", argv[1]);
		return 1;
	}

	f_write = fopen(argv[2], "w");
	if (f_write == NULL) {
		printf("Fichier introuvable: %s\n", argv[2]);
		fclose(f_read);
		return 1;
	}

	Old_elfHeaders = lecture_Headers(f_read, SILENT);
	
	rewind(f_read);
	Old_section_headers = readSectionsHeadersFromFile(f_read, Old_elfHeaders, SILENT);
	
	rewind(f_read);
	sym_tab = lectureSymbolTab(f_read, Old_elfHeaders, Old_section_headers, SILENT);

	rewind(f_read);
	str_reloc = affichage_relocation(f_read, Old_elfHeaders, Old_section_headers, sym_tab, SILENT);
	
	//printf("-----Fin de la lecture de %s-----\n",argv[1]);	

	tab_donnees = remplirDonnees(argc,argv,Old_elfHeaders, Old_section_headers);
	rewind(f_read);
	New_section_headers = renumerote_section(f_read, f_write, Old_elfHeaders, Old_section_headers, &New_elfHeaders, tab_donnees);
	
	//afficher_headers(New_elfHeaders);
	//displaySectionsHeaders(New_elfHeaders, New_section_headers);
	
	rewind(f_read);
	newST = applySymbolsCorrections(f_read, Old_elfHeaders, New_elfHeaders, Old_section_headers, New_section_headers, sym_tab, SILENT);

	afficherTableSymboles(sym_tab, Old_elfHeaders);
	printf("\n");
	afficherTableSymboles(newST, New_elfHeaders);

	//ecrire_nouvelles_sections(f_read, f_write, New_section_headers, Old_section_headers); 

	//writeSectionsHeadersToFile(f_write, New_elfHeaders, New_section_headers);

	//reimplantation_R_ARM(f_read, f_write, Old_elfHeaders, Old_section_headers, New_section_headers, str_reloc, newST);

	//printf("-----Fin de l'ecriture dans %s-----\n", argv[2]);

	fclose(f_read);
	fclose(f_write);

	free_Tab_Donnees(tab_donnees);
	free_Str_Reloc(str_reloc);
	free_SectionsHeadersList(Old_section_headers);
	free_SectionsHeadersList(New_section_headers);
	free_ListeSymboles(sym_tab);
	free_ListeSymboles(newST);

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2c0, %rsp            # imm = 0x2C0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x3, -0x8(%rbp)
jge 0x14f9
leaq 0x5bde(%rip), %rdi      # 0x70c4
movb $0x0, %al
callq 0x1070
movl $0x1, -0x4(%rbp)
jmp 0x1ad2
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x5c21(%rip), %rsi      # 0x7129
callq 0x1120
movq %rax, -0x118(%rbp)
cmpq $0x0, -0x118(%rbp)
jne 0x1540
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x5bfe(%rip), %rdi      # 0x712b
movb $0x0, %al
callq 0x1070
movl $0x1, -0x4(%rbp)
jmp 0x1ad2
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0x5bf5(%rip), %rsi      # 0x7144
callq 0x1120
movq %rax, -0x120(%rbp)
cmpq $0x0, -0x120(%rbp)
jne 0x1593
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x5bb7(%rip), %rdi      # 0x712b
movb $0x0, %al
callq 0x1070
movq -0x118(%rbp), %rdi
callq 0x1050
movl $0x1, -0x4(%rbp)
jmp 0x1ad2
movq -0x118(%rbp), %rsi
leaq -0x154(%rbp), %rdi
movl $0x1, %edx
callq 0x1b90
leaq -0x48(%rbp), %rdi
leaq -0x154(%rbp), %rsi
movl $0x34, %edx
callq 0x10e0
movq -0x118(%rbp), %rdi
callq 0x1080
movq -0x118(%rbp), %rsi
movl -0x18(%rbp), %ecx
movq %rsp, %rax
movl %ecx, 0x30(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x170(%rbp), %rdi
movl $0x1, %edx
callq 0x2ba0
movq -0x170(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x118(%rbp), %rdi
callq 0x1080
movq -0x118(%rbp), %rsi
movq -0x88(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x48(%rax)
movups -0x98(%rbp), %xmm0
movups %xmm0, 0x38(%rax)
movl -0x18(%rbp), %ecx
movl %ecx, 0x30(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x188(%rbp), %rdi
movl $0x1, %edx
callq 0x3710
movq -0x188(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x118(%rbp), %rdi
callq 0x1080
movq -0x118(%rbp), %rsi
movq -0xb8(%rbp), %rcx
movq %rsp, %rax
movq %rax, -0x200(%rbp)
movq %rcx, 0x60(%rax)
movups -0xc8(%rbp), %xmm0
movups %xmm0, 0x50(%rax)
movq -0x88(%rbp), %rcx
movq %rcx, 0x48(%rax)
movups -0x98(%rbp), %xmm0
movups %xmm0, 0x38(%rax)
movl -0x18(%rbp), %ecx
movl %ecx, 0x30(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x1a0(%rbp), %rdi
movl $0x1, %edx
callq 0x4910
movq -0x1a0(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0xe8(%rbp)
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
movq -0x88(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x48(%rax)
movups -0x98(%rbp), %xmm0
movups %xmm0, 0x38(%rax)
movl -0x18(%rbp), %ecx
movl %ecx, 0x30(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x1b8(%rbp), %rdi
callq 0x1380
movq -0x1b8(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x1a8(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x118(%rbp), %rdi
callq 0x1080
movq -0x118(%rbp), %rsi
movq -0x120(%rbp), %rdx
movq -0x100(%rbp), %rcx
movq %rsp, %rax
movq %rax, -0x1f8(%rbp)
movq %rcx, 0x60(%rax)
movups -0x110(%rbp), %xmm0
movups %xmm0, 0x50(%rax)
movq -0x88(%rbp), %rcx
movq %rcx, 0x48(%rax)
movups -0x98(%rbp), %xmm0
movups %xmm0, 0x38(%rax)
movl -0x18(%rbp), %ecx
movl %ecx, 0x30(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x1d0(%rbp), %rdi
leaq -0x80(%rbp), %rcx
callq 0x4bb0
movq -0x1d0(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x1c8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x118(%rbp), %rdi
callq 0x1080
movq -0x118(%rbp), %rsi
movq -0xb8(%rbp), %rcx
movq %rsp, %rax
movq %rax, -0x1f0(%rbp)
movq %rcx, 0xb0(%rax)
movups -0xc8(%rbp), %xmm0
movups %xmm0, 0xa0(%rax)
movq -0xa0(%rbp), %rcx
movq %rcx, 0x98(%rax)
movups -0xb0(%rbp), %xmm0
movups %xmm0, 0x88(%rax)
movq -0x88(%rbp), %rcx
movq %rcx, 0x80(%rax)
movups -0x98(%rbp), %xmm0
movups %xmm0, 0x70(%rax)
movl -0x50(%rbp), %ecx
movl %ecx, 0x68(%rax)
movups -0x80(%rbp), %xmm0
movups -0x70(%rbp), %xmm1
movups -0x60(%rbp), %xmm2
movups %xmm2, 0x58(%rax)
movups %xmm1, 0x48(%rax)
movups %xmm0, 0x38(%rax)
movl -0x18(%rbp), %ecx
movl %ecx, 0x30(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x1e8(%rbp), %rdi
movl $0x1, %edx
callq 0x54f0
movq -0x1e8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x1e0(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x1d8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl -0x18(%rbp), %ecx
movq %rsp, %rax
movl %ecx, 0x48(%rax)
movups -0x48(%rbp), %xmm0
movups -0x38(%rbp), %xmm1
movups -0x28(%rbp), %xmm2
movups %xmm2, 0x38(%rax)
movups %xmm1, 0x28(%rax)
movups %xmm0, 0x18(%rax)
movq -0xb8(%rbp), %rcx
movq %rcx, 0x10(%rax)
movups -0xc8(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x3c20
leaq 0x5ec1(%rip), %rdi      # 0x7854
movb $0x0, %al
callq 0x1070
movl -0x50(%rbp), %ecx
movq %rsp, %rax
movl %ecx, 0x48(%rax)
movups -0x80(%rbp), %xmm0
movups -0x70(%rbp), %xmm1
movups -0x60(%rbp), %xmm2
movups %xmm2, 0x38(%rax)
movups %xmm1, 0x28(%rax)
movups %xmm0, 0x18(%rax)
movq -0xd0(%rbp), %rcx
movq %rcx, 0x10(%rax)
movups -0xe0(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x3c20
movq -0x118(%rbp), %rdi
callq 0x1050
movq -0x120(%rbp), %rdi
callq 0x1050
leaq -0x110(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x4b30
leaq -0xf8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x4b00
leaq -0x98(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x4a80
leaq -0xb0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x4a80
leaq -0xc8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x4ac0
leaq -0xe0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0x4ac0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x2c0, %rsp            # imm = 0x2C0
popq %rbp
retq
nop