Compare commits
No commits in common. "e21df48de15e97c9c9f517754bd23e10cf3e285d" and "3f7c0ac38169b128da4258fbbe9b941685bb2408" have entirely different histories.
e21df48de1
...
3f7c0ac381
|
@ -1,3 +1,3 @@
|
||||||
[submodule "libft"]
|
[submodule "libft2"]
|
||||||
path = libft
|
path = libft2
|
||||||
url = https://git.gaetanbrochard.dev/gbrochar/libft.git
|
url = https://git.gaetanbrochard.dev/gbrochar/libft2.git
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -1,8 +1,6 @@
|
||||||
NAME = ft_nm
|
NAME = ft_nm
|
||||||
|
|
||||||
SRC_FILES = main.c \
|
SRC_FILES = main.c \
|
||||||
error.c \
|
|
||||||
header.c \
|
|
||||||
|
|
||||||
INC_FILES = ft_nm.h \
|
INC_FILES = ft_nm.h \
|
||||||
|
|
||||||
|
@ -20,7 +18,7 @@ CC = gcc
|
||||||
|
|
||||||
CFLAGS = -Wall -Werror -Wextra
|
CFLAGS = -Wall -Werror -Wextra
|
||||||
|
|
||||||
LIB_NAME = libft
|
LIB_NAME = libft2
|
||||||
|
|
||||||
RED = \033[31m
|
RED = \033[31m
|
||||||
GREEN = \033[32m
|
GREEN = \033[32m
|
||||||
|
@ -40,7 +38,7 @@ $(NAME): create_libft $(OBJ) $(INC)
|
||||||
create_libft:
|
create_libft:
|
||||||
@git submodule update --init
|
@git submodule update --init
|
||||||
@make -C $(LIB_NAME)
|
@make -C $(LIB_NAME)
|
||||||
@cp $(LIB_NAME)/libft.h inc/libft.h
|
@cp $(LIB_NAME)/inc/libft.h inc/libft.h
|
||||||
|
|
||||||
$(OBJ_DIR)%.o: $(SRC_DIR)%.c
|
$(OBJ_DIR)%.o: $(SRC_DIR)%.c
|
||||||
@if [ ! -d ./obj ]; then \
|
@if [ ! -d ./obj ]; then \
|
||||||
|
|
|
@ -9,10 +9,4 @@
|
||||||
|
|
||||||
# include "libft.h"
|
# include "libft.h"
|
||||||
|
|
||||||
# define FT_NM_SUCCESS 0
|
|
||||||
# define FT_NM_FAILURE -1
|
|
||||||
|
|
||||||
void ft_nm_error(const char *path);
|
|
||||||
int check_header(Elf64_Ehdr *header);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
1
libft
1
libft
|
@ -1 +0,0 @@
|
||||||
Subproject commit 1ab0cdf1acf97db0cb8d90940c96a6f1ccb3a7af
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit f4238872bb85d8317f5b4867b45cf81197ba0576
|
11
src/error.c
11
src/error.c
|
@ -1,11 +0,0 @@
|
||||||
#include "ft_nm.h"
|
|
||||||
// XXX
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
void ft_nm_error(const char *path) {
|
|
||||||
char *str = malloc(8 + ft_strlen(path));
|
|
||||||
ft_strcpy(str, "ft_nm: ");
|
|
||||||
ft_strcat(str, path);
|
|
||||||
perror(str);
|
|
||||||
free(str);
|
|
||||||
}
|
|
26
src/header.c
26
src/header.c
|
@ -1,26 +0,0 @@
|
||||||
#include "ft_nm.h"
|
|
||||||
|
|
||||||
int check_magic_number(Elf64_Ehdr *header) {
|
|
||||||
if (ft_strncmp((void *)&header->e_ident[EI_MAG0], "\x7f""ELF", 4)) {
|
|
||||||
return FT_NM_FAILURE;
|
|
||||||
}
|
|
||||||
return FT_NM_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_format(Elf64_Ehdr *header) {
|
|
||||||
if (header->e_ident[EI_CLASS] == ELFCLASSNONE) {
|
|
||||||
printf("problem\n");
|
|
||||||
return FT_NM_FAILURE;
|
|
||||||
}
|
|
||||||
return FT_NM_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_header(Elf64_Ehdr *header) {
|
|
||||||
if (check_magic_number(header) == FT_NM_FAILURE) {
|
|
||||||
return FT_NM_FAILURE;
|
|
||||||
}
|
|
||||||
if (check_format(header) == FT_NM_FAILURE) {
|
|
||||||
return FT_NM_FAILURE;
|
|
||||||
}
|
|
||||||
return FT_NM_SUCCESS;
|
|
||||||
}
|
|
22
src/main.c
22
src/main.c
|
@ -1,12 +1,5 @@
|
||||||
#include "ft_nm.h"
|
#include "ft_nm.h"
|
||||||
|
|
||||||
void print_bits(char c) {
|
|
||||||
for (int a = 7; a >= 0; a--) {
|
|
||||||
ft_putnbr(c >> a & 1);
|
|
||||||
}
|
|
||||||
ft_putchar('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int ac, char **av) {
|
int main(int ac, char **av) {
|
||||||
char *path = ft_strdup("a.out");
|
char *path = ft_strdup("a.out");
|
||||||
if (ac > 1) {
|
if (ac > 1) {
|
||||||
|
@ -14,22 +7,17 @@ int main(int ac, char **av) {
|
||||||
path = av[1];
|
path = av[1];
|
||||||
}
|
}
|
||||||
int fd = open(path, O_RDONLY);
|
int fd = open(path, O_RDONLY);
|
||||||
if (fd == -1) {
|
printf("Opening file %s with fd %d\n", path, fd);
|
||||||
ft_nm_error(path);
|
|
||||||
}
|
|
||||||
void *ptr = NULL;
|
void *ptr = NULL;
|
||||||
Elf64_Ehdr *header;
|
Elf64_Ehdr *header;
|
||||||
|
|
||||||
ptr = mmap(NULL, 64, PROT_READ, MAP_PRIVATE, fd, 0);
|
ptr = mmap(NULL, 64, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||||
if (ptr != MAP_FAILED) {
|
if (ptr != MAP_FAILED) {
|
||||||
header = (Elf64_Ehdr *)ptr;
|
header = (Elf64_Ehdr *)ptr;
|
||||||
if (check_header(header) == FT_NM_FAILURE) {
|
write(1, ptr, 4);
|
||||||
printf("ft_nm: %s: file format not recognized\n", path);
|
write(1, "\n", 1);
|
||||||
exit (1);
|
write(1, header->e_ident, 4);
|
||||||
}
|
write(1, "\n", 1);
|
||||||
for (int i = 0; i < 64; i++) {
|
|
||||||
print_bits(((char *)ptr)[i]);
|
|
||||||
}
|
|
||||||
if (header->e_ident[EI_OSABI] == 0x00) {
|
if (header->e_ident[EI_OSABI] == 0x00) {
|
||||||
printf("This ELF is for System V! :)\n");
|
printf("This ELF is for System V! :)\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue