From 29f8c9fd6379d97b3bd02c06b724287904dae0af Mon Sep 17 00:00:00 2001 From: nicolas-arnaud Date: Sat, 8 Apr 2023 23:44:43 +0200 Subject: [PATCH] changed all printf and fprintf to mine --- --force | 1 + .../index/ft_printf.h.E66E29B51655512D.idx | Bin 2298 -> 2934 bytes .../clangd/index/libft.h.4AAB37F6DDB83F16.idx | Bin 6466 -> 6630 bytes .../clangd/index/main.c.3F920B18C55EC32E.idx | Bin 2352 -> 2352 bytes Makefile | 21 ++-- ft_printf | 2 +- includes/ft_printf.h | 33 ++++-- includes/ft_re.h | 2 + includes/libft.h | 2 + lib/libftprintf.a | Bin 140024 -> 0 bytes main.c | 29 ++--- re/re32.c | 100 +++++++++--------- re/re64.c | 100 +++++++++--------- 13 files changed, 157 insertions(+), 133 deletions(-) create mode 160000 --force delete mode 100644 lib/libftprintf.a diff --git a/--force b/--force new file mode 160000 index 0000000..d2d5c96 --- /dev/null +++ b/--force @@ -0,0 +1 @@ +Subproject commit d2d5c969e820e0350d1d70c2977e2b6b1f48e5a5 diff --git a/.cache/clangd/index/ft_printf.h.E66E29B51655512D.idx b/.cache/clangd/index/ft_printf.h.E66E29B51655512D.idx index 2f2e3d922de3fc0aae45c57d49c41ae2f634b505..8fa88f7c514138efa3918a249a284a127dc1c014 100644 GIT binary patch literal 2934 zcmYk73s93+7RN7-FC^rW@C<~6M<7DTmv;ghFi;<$;;I!ZqO7&DAW}inpaKe3p+$?e zZgr{E)pdZnJ`jfjx{RZaRIRl;EuwaDMVzXrxE5r)bY<4p-rRgAni(#c|NY-{&$;*9 zU$SOpWULkhy?)qmPQel_{gRqxUCU~y05^qpsNZMO&0MmBDI z__%fLgQD|`c0`p$OpfkrsPBx(Yqg*6&}>-WlU(&=rD5cbYFh2NzDFsSrq@1v`aiSxkJTqCSn%_{>nrF2yInXqBYuu(Zc}Mfpr?wY| z(x100rM2H@9W8Xs&+3bn&8}ulU2%&y{809nIoH>>9h}Id9b$&0KC92~z`VvfWB+Kv zrJoz`thb&1bIoPT4-q|;q2Cr3JsZE`f9k;Q&|3o`CFAxKJ-T$%ly)!cW<2j-HScAP z*9;vmF8!=-TT}n5%<9{xFnn5oc2VamhUV>90#u zkMY0D+VybiR`vCaik8|1(WcN&ho`D0sr;nmM9t6X&10nt!~Jh2ER$?G(DC#|)~%`^ zQ}dU7^xMr79|vq=5|?IcTdK?{_ogn8?a149wQE@6zjNTqC-!Gwy!UdXXO3PA%{=1SNF!n;q@mzKW=JOY4aOu>OVK1S=yk?xUVQO7EW$y zE!~``t8VI*6pwzo_up2@sqHWHJ<=-!GM;|(jlR9={>NXhn_^9TUeVUwv?6@_x6^H3 z+wayK>3w>C<*WUggV}!lOm17+$#eC#FT-x6ZQ9`7Tvl0>b#Z@T)P<2b7|kYq zoZ3@V-~ z3<-ifQM{5wh!sBi>;HD2|2sz0!4S`jmm-0}-(^sJ99X!>UO0@A4h%_5k_ZXHd|X?o zUwsrgaQ0${5KSZbMS4c^>3{^(PPQ<4YxsMQ$)y-sAVRDlHV_E{0?^c0Vn}T0~cR*Wh z*O0w+hObdCLT`}_7obf7?4)+*{R)Q97*GGFozia$nc_=9u;we;ghx$7mK9bc~K{5as7G98}(W zB9%occqoKsjFO^jnO2C5XXxnO%g6}HA$!8_^#a~IW({V8)!mw`aiY=Yz9!aWGEH(5mNh4tC%c~!YcW`o;86p=NX3*}Txk~D z1>YN$OM*QxtB@%a@WKFQ#7!Z_xuFyyQ*?1M)JtRvEKUYodH7OHL2Co1i0ot($bcsj zgkp&c0{Ih}!ibXrMMS0u;$#32iS48h#I_&)?%JtJTb(CnV^E9_REODE6zc;gQx@&# zHCkF#K#syHwgy2y04);INh}Bnr%V!{km3@610*s<6DI?hh)jXR$$%pg+sPt`4R=l4 z6hE9B;6vO_@_-w9h`1?iI5#vCktt$08CH=XPP%X^g61Y}iW5!;m=L#H>9A zs1>vNK)v*hhZAU!!eL_87-Ez|ikLO|n?m1sIKgHaTq$NPL6&f6Jj^CVC&dFWp3ggJ zAFONdAW4e^BKPq*3W}FI6D@Q6p^W~zvYVC(CRTKZBzbAnTBPQRApbP4ziMB9{Xaw| B8TJ4G literal 2298 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 literal 6466 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 JgmQX+{6FvxQ)2)C diff --git a/.cache/clangd/index/main.c.3F920B18C55EC32E.idx b/.cache/clangd/index/main.c.3F920B18C55EC32E.idx index 703e0cdb2db7e7508789d9167a81b3b2bd94a115..d726a0810dda0e9b7932c027dd76c1d14504d24f 100644 GIT binary patch delta 1060 zcmdlWv_WXYc}8_R7CR0B5WxTiMX71Uoa_t?EVANd3tK`N77 zDU+=|SMX%k*)1Sx0dEnQu+p21)Lrs1!a!j+J~yGi;jgM6F6D1i>v-E=IDL8p6OVwo zoVf-}HIIO=oG+Yb_O`BX^WJ`IW}seEH*1()9sze%cWoe#3v3jRK)8PRNoj4Qz5grviIaGW2A7KyR=t(n#MTM)n1!H) z1k5==o}q;WjF*t8Sk>}hUy6xKz=UP8JPVJj4~LH^%=pA~hU!<}81zAIkoHuB2?O0A z7p#Kdg$jpCB6wkPVJedgSQIsU4SX$N!eGDK!gwjSXPuMpd2$696;`fRlXtRcOPR@- zDZ?CL>m4pa|6Sp8Ss`&c(vk!UHB*GJ?nN4psUy0nnil;t`Yi*&?OP1kA)?S{EcTDY>N8M}oYmXEnKr%_$5yOx8~8D2aTd z{|qSYA>tto3!DvJaUu`u%zgre-8tNOVZxi#TjH;!$L;9V%KJN zlXaWy!ER|7&JoTB)AW%0-ucI9VRPs zh%j5*TTiy&(AM>q@`lGZivY5-QKJ%=<|V@?Pv8)7Mb4@JQ#GQEc5GvZCLCCRKoSmu y2TC{y9ysB= delta 1035 zcmdlWv_WXYc}8_x7F!Mh5WxTiMX71Uoa_t?EVANd3tK`N7v-E=IDL8p6OVwI zoS6npHIIOooEMyD_O`BX^WJ`IW}seES8JGF9sxI1H*Fw~3v3jRK#+dWOJ{AQz5g5vd83PW^HB*L5s-~fwZ}-`Q-h~N*a#Rjv&*( zhQ$f1-b!v_>jb*XT+mzsW*U%ZXg=ACMak8Z!&4NdI5C}}`qeiEeHI=8cRhC#m@tok zzm&fMf)}6>poicEN(U-V-pHb;;brJ$2@?i8(iX-`xjpNge9x0Bz%a9PwVeEmMO(_W zz_c9ZnC#mQtW!Vfp9h7sp2uW+);MN!Tl2{aSVeSQU0nlV%7DRS=H`Upx#zoABX~iM zL6aY{ibPvUSjoXeyC=*PJ`&@(1Lz+!K{H91Fpy_xW{Kc=33?&Pd5d|&4d~tfZhe&V zl?6bT1&aqy4q%IvGEFhfhG|`p$fV?wRv!uSm!9S1!)#7r$bqnST1QFb8~tZMX?GEK zX;^4%@QM?8P-pfNDD1}J#tRePq}~#LEj@NGCdBE)85%5;_o*d1t&Fm`cI=PeG zvOb6-h!3XeA@{xWvt1b*Kn~;y7K8~udHu`X%xSA5h>&^iQok&1gIl; zfx>}OFy7O0#S7L83crASCSeH=k5>yjEiku<;r)oqS?byZ+O?C*MgOVMB2TFDb9yr;(N+DoLvn6P4j)hvHxDldD?1yDFsC3FGY - +# include typedef struct s_opts { int len; @@ -30,19 +30,30 @@ typedef struct s_opts { int plus : 1; } t_opts; + +void add_string(char *str, size_t size); +t_dlist *get_last(void); +t_dlist *get_first(void); +void clean_list(void); + char *int_opts_transform(int n, char *nbr, t_opts *opts); char *uint_opts_transform(unsigned int n, char *nbr, t_opts *opts); char *ptr_opts_transform(char *ptr, t_opts *opts); char *str_opts_transform(char *str, t_opts *opts); -int ft_print_char(int ch, t_opts *opts); -int ft_print_str(char *str, t_opts *opts); -int va_print_char(va_list va_ch, const char *str, t_opts *opts); -int va_print_str(va_list va_str, const char *str, t_opts *opts); -int va_print_ptr(va_list va_ptr, const char *str, t_opts *opts); -int va_print_nbr(va_list va_int, const char *str, t_opts *opts); -int va_print_unsign(va_list va_uint, const char *str, t_opts *opts); -int va_print_x(va_list va_uint, const char *str, t_opts *opts); -int va_print_x_cap(va_list va_uint, const char *str, t_opts *opts); -int va_print_perc(va_list va, const char *str, t_opts *opts); +void ft_print_char(int ch, t_opts *opts); +void ft_print_str(char *str, t_opts *opts); +void va_print_char(va_list va_ch, const char *str, t_opts *opts); +void va_print_str(va_list va_str, const char *str, t_opts *opts); +void va_print_ptr(va_list va_ptr, const char *str, t_opts *opts); +void va_print_nbr(va_list va_int, const char *str, t_opts *opts); +void va_print_unsign(va_list va_uint, const char *str, t_opts *opts); +void va_print_x(va_list va_uint, const char *str, t_opts *opts); +void va_print_x_cap(va_list va_uint, const char *str, t_opts *opts); +void va_print_perc(va_list va, const char *str, t_opts *opts); + +void ft_format(const char *str, va_list args); + int ft_printf(const char *str, ...); +int ft_fprintf(FILE *file, const char *format, ...); +int ft_sprintf(char *ret, const char *format, ...); diff --git a/includes/ft_re.h b/includes/ft_re.h index 5f3e6d7..b185b83 100644 --- a/includes/ft_re.h +++ b/includes/ft_re.h @@ -5,6 +5,8 @@ #include "ctype.h" #include "unistd.h" +#include "ft_printf.h" + int ft_re32(char *filename, int filesize, char *file, t_opts opts); int ft_re64(char *filename, int filesize, char *file, t_opts opts); diff --git a/includes/libft.h b/includes/libft.h index 20b31d4..14abb23 100755 --- a/includes/libft.h +++ b/includes/libft.h @@ -31,6 +31,7 @@ typedef struct s_i_slist typedef struct s_dlist { void *content; + size_t size; struct s_dlist *next; struct s_dlist *previous; } t_dlist; @@ -84,6 +85,7 @@ char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); void ft_striteri(char *s, void (*f)(unsigned int, char*)); void ft_putchar_fd(char c, int fd); void ft_putstr_fd(char *s, int fd); +void ft_putnstr_fd(size_t n, char *s, int fd); void ft_putendl_fd(char *s, int fd); void ft_putnbr_fd(int n, int fd); char *ft_append(char *s1, char *s2); diff --git a/lib/libftprintf.a b/lib/libftprintf.a deleted file mode 100644 index 12c7afeb29e461d3bea3b5ed7c7d0a30d9ba3a25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140024 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 + nm->shdr[i].sh_name); - printf("%-8s", get_section_type(nm->shdr[i].sh_type)); - printf("%08x ", nm->shdr[i].sh_addr); - printf("%06x ", nm->shdr[i].sh_offset); - printf("%06x ", nm->shdr[i].sh_size); - printf("%02x ", nm->shdr[i].sh_entsize); - printf("%3s ", get_section_flags(nm->shdr[i].sh_flags)); - printf("%02x ", nm->shdr[i].sh_link); - printf("%02x ", nm->shdr[i].sh_info); - printf("%02x\n", nm->shdr[i].sh_addralign); + ft_printf(" [%2d] ", i); + ft_printf("%-18s", nm->string_table + nm->shdr[i].sh_name); + ft_printf("%-8s", get_section_type(nm->shdr[i].sh_type)); + ft_printf("%08x ", nm->shdr[i].sh_addr); + ft_printf("%06x ", nm->shdr[i].sh_offset); + ft_printf("%06x ", nm->shdr[i].sh_size); + ft_printf("%02x ", nm->shdr[i].sh_entsize); + ft_printf("%3s ", get_section_flags(nm->shdr[i].sh_flags)); + ft_printf("%02x ", nm->shdr[i].sh_link); + ft_printf("%02x ", nm->shdr[i].sh_info); + ft_printf("%02x\n", nm->shdr[i].sh_addralign); } void display_32_header(t_elf32 *nm) { - printf("ELF Header:\n"); - printf(" Magic: "); - for (int i = 0; i < EI_NIDENT; i++) printf("%02x ", nm->ehdr->e_ident[i]); - printf("\n Class: ELF32\n"); - printf( + ft_printf("ELF Header:\n"); + ft_printf(" Magic: "); + for (int i = 0; i < EI_NIDENT; i++)ft_printf("%02x ", nm->ehdr->e_ident[i]); + ft_printf("\n Class: ELF32\n"); + ft_printf( " Data: 2's complement, little endian\n"); - printf(" Version: 1 (current)\n"); - printf(" OS/ABI: UNIX - System V\n"); - printf(" ABI Version: 0\n"); - printf(" Version: 0x%08x\n", + ft_printf(" Version: 1 (current)\n"); + ft_printf(" OS/ABI: UNIX - System V\n"); + ft_printf(" ABI Version: 0\n"); + ft_printf(" Version: 0x%08x\n", nm->ehdr->e_version); - printf(" Entry point address: 0x%08x\n", + ft_printf(" Entry point address: 0x%08x\n", nm->ehdr->e_entry); - printf(" Start of program headers: %d (bytes into file)\n", + ft_printf(" Start of program headers: %d (bytes into file)\n", nm->ehdr->e_phoff); - printf(" Start of section headers: %d (bytes into file)\n", + ft_printf(" Start of section headers: %d (bytes into file)\n", nm->ehdr->e_shoff); - printf(" Flags: 0x%08x\n", nm->ehdr->e_flags); - printf(" Size of this header: %d (bytes)\n", + ft_printf(" Flags: 0x%08x\n", nm->ehdr->e_flags); + ft_printf(" Size of this header: %d (bytes)\n", nm->ehdr->e_ehsize); - printf(" Size of program headers: %d (bytes)\n", + ft_printf(" Size of program headers: %d (bytes)\n", nm->ehdr->e_phentsize); - printf(" Number of program headers: %d\n", nm->ehdr->e_phnum); - printf(" Size of section headers: %d (bytes)\n", + ft_printf(" Number of program headers: %d\n", nm->ehdr->e_phnum); + ft_printf(" Size of section headers: %d (bytes)\n", nm->ehdr->e_shentsize); - printf(" Number of section headers: %d\n", nm->ehdr->e_shnum); - printf(" Section header string table index: %d\n", nm->ehdr->e_shstrndx); + ft_printf(" Number of section headers: %d\n", nm->ehdr->e_shnum); + ft_printf(" Section header string table index: %d\n", nm->ehdr->e_shstrndx); } int print_32_symtab(t_elf32 *nm) { int sym_num = nm->symtab_end - nm->symtab; - printf("Symbol table '%s' contains %d entries:\n", nm->file, sym_num); - printf("Contents of the (%s) section: \n", + ft_printf("Symbol table '%s' contains %d entries:\n", nm->file, sym_num); + ft_printf("Contents of the (%s) section: \n", nm->string_table + nm->shdr[nm->ehdr->e_shstrndx].sh_name); - printf( + ft_printf( "| Num: |Value |Size |Type |Bind |Vis " " |Ndx0x |Ndx " " |shndxty |shndxfl|nmChar |Name\n"); for (int i = 0; i < sym_num; i++) { int id = nm->opts.p == 0 ? nm->ordered_sym_ids[i] : i; - printf("| %4d: ", id); - printf("|%8x ", nm->symtab[id].st_value); - printf("|%8x ", nm->symtab[id].st_size); - printf("|%-6s ", get_sym_type(ELF32_ST_TYPE(nm->symtab[id].st_info))); - printf("|%-6s ", get_sym_bind(ELF32_ST_BIND(nm->symtab[id].st_info))); - printf("|%-7s ", + ft_printf("| %4d: ", id); + ft_printf("|%8x ", nm->symtab[id].st_value); + ft_printf("|%8x ", nm->symtab[id].st_size); + ft_printf("|%-6s ", get_sym_type(ELF32_ST_TYPE(nm->symtab[id].st_info))); + ft_printf("|%-6s ", get_sym_bind(ELF32_ST_BIND(nm->symtab[id].st_info))); + ft_printf("|%-7s ", get_sym_vis(ELF32_ST_VISIBILITY(nm->symtab[id].st_other))); - printf("|%5d", nm->symtab[id].st_shndx); - printf("|%7s ", get_sym_shndx(nm->symtab[id].st_shndx)); + ft_printf("|%5d", nm->symtab[id].st_shndx); + ft_printf("|%7s ", get_sym_shndx(nm->symtab[id].st_shndx)); if (nm->symtab[id].st_shndx < nm->ehdr->e_shnum) { - printf("|%8s", + ft_printf("|%8s", get_sh_type(nm->shdr[nm->symtab[id].st_shndx].sh_type)); - printf("|%8s", + ft_printf("|%8s", get_sh_flag(nm->shdr[nm->symtab[id].st_shndx].sh_flags)); } else { - printf("|%8c", ' '); - printf("|%8c", ' '); + ft_printf("|%8c", ' '); + ft_printf("|%8c", ' '); } - printf("|%6c ", nm->sym_types[id]); - printf("|%s\n", nm->sym_names[id]); + ft_printf("|%6c ", nm->sym_types[id]); + ft_printf("|%s\n", nm->sym_names[id]); } return 1; } @@ -97,7 +97,7 @@ int ft_re32(char *filename, int filesize, char *file, t_opts opts) { // check if file is complete if (nm.ehdr->e_shoff + nm.ehdr->e_shnum * nm.ehdr->e_shentsize > nm.size) { - fprintf(stderr, "bfd plugin: %s: file too short\n", nm.file); + ft_fprintf(stderr, "bfd plugin: %s: file too short\n", nm.file); return -1; } diff --git a/re/re64.c b/re/re64.c index b5ace28..6c8b5f4 100644 --- a/re/re64.c +++ b/re/re64.c @@ -1,90 +1,90 @@ #include "ft_re.h" void display_64_section_header(t_elf64 *nm, int i) { - printf( + ft_printf( " [Nr] Name Type Addr Off Size " " " "ES Flg Lk Inf Al\n"); - printf(" [%2d] ", i); - printf("%-18s", nm->string_table + nm->shdr[i].sh_name); - printf("%-16s", get_section_type(nm->shdr[i].sh_type)); - printf("%016lx ", nm->shdr[i].sh_addr); - printf("%06lx ", nm->shdr[i].sh_offset); - printf("%06lx ", nm->shdr[i].sh_size); - printf("%02lx ", nm->shdr[i].sh_entsize); - printf("%3s ", get_section_flags(nm->shdr[i].sh_flags)); - printf("%02x ", nm->shdr[i].sh_link); - printf("%02x ", nm->shdr[i].sh_info); - printf("%02lx\n", nm->shdr[i].sh_addralign); + ft_printf(" [%2d] ", i); + ft_printf("%-18s", nm->string_table + nm->shdr[i].sh_name); + ft_printf("%-16s", get_section_type(nm->shdr[i].sh_type)); + ft_printf("%016lx ", nm->shdr[i].sh_addr); + ft_printf("%06lx ", nm->shdr[i].sh_offset); + ft_printf("%06lx ", nm->shdr[i].sh_size); + ft_printf("%02lx ", nm->shdr[i].sh_entsize); + ft_printf("%3s ", get_section_flags(nm->shdr[i].sh_flags)); + ft_printf("%02x ", nm->shdr[i].sh_link); + ft_printf("%02x ", nm->shdr[i].sh_info); + ft_printf("%02lx\n", nm->shdr[i].sh_addralign); } void display_64_header(t_elf64 *nm) { - printf("ELF Header:\n"); - printf(" Magic: "); - for (int i = 0; i < EI_NIDENT; i++) printf("%02x ", nm->ehdr->e_ident[i]); - printf("\n Class: ELF64\n"); - printf( + ft_printf("ELF Header:\n"); + ft_printf(" Magic: "); + for (int i = 0; i < EI_NIDENT; i++)ft_printf("%02x ", nm->ehdr->e_ident[i]); + ft_printf("\n Class: ELF64\n"); + ft_printf( " Data: 2's complement, little endian\n"); - printf(" Version: 1 (current)\n"); - printf(" OS/ABI: UNIX - System V\n"); - printf(" ABI Version: 0\n"); - printf(" Version: 0x%016x\n", + ft_printf(" Version: 1 (current)\n"); + ft_printf(" OS/ABI: UNIX - System V\n"); + ft_printf(" ABI Version: 0\n"); + ft_printf(" Version: 0x%016x\n", nm->ehdr->e_version); - printf(" Entry point address: 0x%016lx\n", + ft_printf(" Entry point address: 0x%016lx\n", nm->ehdr->e_entry); - printf(" Start of program headers: %ld (bytes into file)\n", + ft_printf(" Start of program headers: %ld (bytes into file)\n", nm->ehdr->e_phoff); - printf(" Start of section headers: %ld (bytes into file)\n", + ft_printf(" Start of section headers: %ld (bytes into file)\n", nm->ehdr->e_shoff); - printf(" Flags: 0x%016x\n", nm->ehdr->e_flags); - printf(" Size of this header: %d (bytes)\n", + ft_printf(" Flags: 0x%016x\n", nm->ehdr->e_flags); + ft_printf(" Size of this header: %d (bytes)\n", nm->ehdr->e_ehsize); - printf(" Size of program headers: %d (bytes)\n", + ft_printf(" Size of program headers: %d (bytes)\n", nm->ehdr->e_phentsize); - printf(" Number of program headers: %d\n", nm->ehdr->e_phnum); - printf(" Size of section headers: %d (bytes)\n", + ft_printf(" Number of program headers: %d\n", nm->ehdr->e_phnum); + ft_printf(" Size of section headers: %d (bytes)\n", nm->ehdr->e_shentsize); - printf(" Number of section headers: %d\n", nm->ehdr->e_shnum); - printf(" Section header string table index: %d\n", nm->ehdr->e_shstrndx); + ft_printf(" Number of section headers: %d\n", nm->ehdr->e_shnum); + ft_printf(" Section header string table index: %d\n", nm->ehdr->e_shstrndx); } int print_64_symtab(t_elf64 *nm) { int sym_num = nm->symtab_end - nm->symtab; - printf("Symbol table '%s' contains %d entries:\n", nm->file, sym_num); - printf("Contents of the (%s) section: \n", + ft_printf("Symbol table '%s' contains %d entries:\n", nm->file, sym_num); + ft_printf("Contents of the (%s) section: \n", nm->string_table + nm->shdr[nm->ehdr->e_shstrndx].sh_name); - printf( + ft_printf( "| Num: |Value |Size |Type |Bind |Vis " " |Ndx0x |Ndx " " |shndxty |shndxfl|nmChar |Name\n"); for (int i = 0; i < sym_num; i++) { int id = nm->opts.p == 0 ? nm->ordered_sym_ids[i] : i; - printf("| %4d: ", id); - printf("|%16lx ", nm->symtab[id].st_value); - printf("|%16lx ", nm->symtab[id].st_size); - printf("|%-6s ", get_sym_type(ELF64_ST_TYPE(nm->symtab[id].st_info))); - printf("|%-6s ", get_sym_bind(ELF64_ST_BIND(nm->symtab[id].st_info))); - printf("|%-7s ", + ft_printf("| %4d: ", id); + ft_printf("|%16lx ", nm->symtab[id].st_value); + ft_printf("|%16lx ", nm->symtab[id].st_size); + ft_printf("|%-6s ", get_sym_type(ELF64_ST_TYPE(nm->symtab[id].st_info))); + ft_printf("|%-6s ", get_sym_bind(ELF64_ST_BIND(nm->symtab[id].st_info))); + ft_printf("|%-7s ", get_sym_vis(ELF64_ST_VISIBILITY(nm->symtab[id].st_other))); - printf("|%5d", nm->symtab[id].st_shndx); - printf("|%7s ", get_sym_shndx(nm->symtab[id].st_shndx)); + ft_printf("|%5d", nm->symtab[id].st_shndx); + ft_printf("|%7s ", get_sym_shndx(nm->symtab[id].st_shndx)); if (nm->symtab[id].st_shndx < nm->ehdr->e_shnum) { - printf("|%8s", + ft_printf("|%8s", get_sh_type(nm->shdr[nm->symtab[id].st_shndx].sh_type)); - printf("|%8s", + ft_printf("|%8s", get_sh_flag(nm->shdr[nm->symtab[id].st_shndx].sh_flags)); } else { - printf("|%8c", ' '); - printf("|%8c", ' '); + ft_printf("|%8c", ' '); + ft_printf("|%8c", ' '); } - printf("|%6c ", nm->sym_types[id]); - printf("|%s\n", nm->sym_names[id]); + ft_printf("|%6c ", nm->sym_types[id]); + ft_printf("|%s\n", nm->sym_names[id]); } return 1; } -int parse_64_symtab(t_elf64 *nm) { +nt parse_64_symtab(t_elf64 *nm) { Elf64_Shdr *shdr = &nm->shdr[nm->ehdr->e_shstrndx]; nm->string_table = (char *)(nm->ptr + shdr->sh_offset); for (int i = 0; i < nm->ehdr->e_shnum; i++) { @@ -136,7 +136,7 @@ int ft_re64(char *filename, int filesize, char *file, t_opts opts) { // check if file is complete if (nm.ehdr->e_shoff + nm.ehdr->e_shnum * nm.ehdr->e_shentsize > nm.size) { - fprintf(stderr, "bfd plugin: %s: file too short\n", nm.file); + ft_fprintf(stderr, "bfd plugin: %s: file too short\n", nm.file); return -1; }