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 | *.o | ||||||
| *.a | *.a | ||||||
| *.so | *.so | ||||||
| .vscode | .vscode/* | ||||||
|  | !.vscode/launch.json | ||||||
|  | !.vscode/tasks.json | ||||||
| /bld | /bld | ||||||
| /debug_bld | /debug_bld | ||||||
| /out | /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') | libft_dep = libft.get_variable('libft_dep') | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| ft_nm = executable( | ft_nm = executable( | ||||||
| 	'ft_nm', | 	'ft_nm', | ||||||
| 	sources, | 	sources, | ||||||
|  |  | ||||||
							
								
								
									
										39
									
								
								src/main.c
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								src/main.c
									
										
									
									
									
								
							|  | @ -1,7 +1,42 @@ | ||||||
| #include "libft.h" | #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); | 	return(0); | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue