parse elf_header
This commit is contained in:
		
							parent
							
								
									a3264249e8
								
							
						
					
					
						commit
						b9b93a9104
					
				
					 5 changed files with 77 additions and 3 deletions
				
			
		
							
								
								
									
										4
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -1,7 +1,9 @@ | |||
| *.o | ||||
| *.a | ||||
| *.so | ||||
| .vscode | ||||
| .vscode/* | ||||
| !.vscode/launch.json | ||||
| !.vscode/tasks.json | ||||
| /bld | ||||
| /debug_bld | ||||
| /out | ||||
|  |  | |||
							
								
								
									
										24
									
								
								.vscode/launch.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								.vscode/launch.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| { | ||||
|     // Use IntelliSense to learn about possible attributes. | ||||
|     // Hover to view descriptions of existing attributes. | ||||
|     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|     "version": "0.2.0", | ||||
|     "configurations": [ | ||||
|         { | ||||
|             "name": "self read", | ||||
|             "type": "cppdbg", | ||||
|             "request": "launch", | ||||
|             "program": "${workspaceFolder}/debug_bld/ft_nm", | ||||
|             "args": ["ft_nm"], | ||||
|             "preLaunchTask": "build", | ||||
|             "stopAtEntry": false, | ||||
|             "cwd": "${workspaceFolder}", | ||||
|             "environment": [], | ||||
|             "externalConsole": false, | ||||
|             "MIMode": "gdb", | ||||
|             "osx": { | ||||
|                 "MIMode": "lldb" | ||||
|             } | ||||
|         } | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										12
									
								
								.vscode/tasks.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.vscode/tasks.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| { | ||||
|     // See https://go.microsoft.com/fwlink/?LinkId=733558 | ||||
|     // for the documentation about the tasks.json format | ||||
|     "version": "2.0.0", | ||||
|     "tasks": [ | ||||
|         { | ||||
|             "label": "build", | ||||
|             "type": "shell", | ||||
|             "command": "ninja -C debug_bld" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
|  | @ -35,6 +35,7 @@ libft = subproject('libft') | |||
| 
 | ||||
| libft_dep = libft.get_variable('libft_dep') | ||||
| 
 | ||||
| 
 | ||||
| ft_nm = executable( | ||||
| 	'ft_nm', | ||||
| 	sources, | ||||
|  |  | |||
							
								
								
									
										39
									
								
								src/main.c
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								src/main.c
									
										
									
									
									
								
							|  | @ -1,7 +1,42 @@ | |||
| #include "libft.h" | ||||
| #include <fcntl.h> | ||||
| #include <sys/stat.h> | ||||
| #include <elf.h> | ||||
| 
 | ||||
| int		main(void) | ||||
| int		main(int argc, char **argv) | ||||
| { | ||||
| 	ft_putstr("Hello world!\n"); | ||||
| 	if (argc != 2) | ||||
| 	{ | ||||
| 		ft_putstr("usage\n"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	int fd = open(argv[1], O_RDONLY); | ||||
| 	if (fd == -1) | ||||
| 	{ | ||||
| 		ft_putstr("can't open file\n"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	struct stat stat_buff; | ||||
| 	stat(argv[1], &stat_buff); | ||||
| 	if (!S_ISREG(stat_buff.st_mode)) | ||||
| 	{ | ||||
| 		ft_putstr("not a regular file\n"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	Elf64_Ehdr elf_header; | ||||
| 	read(fd, &elf_header, sizeof(Elf64_Ehdr)); | ||||
| 	if (elf_header.e_ident[EI_MAG0] != ELFMAG0 ||  | ||||
| 		elf_header.e_ident[EI_MAG1] != ELFMAG1 || | ||||
| 		elf_header.e_ident[EI_MAG2] != ELFMAG2) | ||||
| 	{ | ||||
| 		ft_putstr("not a valid magic number for elf binary file\n"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	if (elf_header.e_ident[EI_CLASS] != ELFCLASS64) | ||||
| 	{ | ||||
| 		ft_putstr("sorry, only 64bit elf binaries for now"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	ft_putstr("symbol table\n"); | ||||
| 	return(0); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue