basic idea of ar
This commit is contained in:
		
							parent
							
								
									d122896244
								
							
						
					
					
						commit
						d991383a26
					
				
					 3 changed files with 46 additions and 2 deletions
				
			
		
							
								
								
									
										16
									
								
								.vscode/launch.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.vscode/launch.json
									
										
									
									
										vendored
									
									
								
							|  | @ -64,6 +64,22 @@ | |||
|             "environment": [], | ||||
|             "externalConsole": false, | ||||
|             "MIMode": "gdb", | ||||
|             "osx": { | ||||
|                 "MIMode": "lldb" | ||||
|             } | ||||
| 		}, | ||||
| 		{ | ||||
|             "name": "ar", | ||||
|             "type": "cppdbg", | ||||
|             "request": "launch", | ||||
|             "program": "${workspaceFolder}/debug_bld/ft_nm", | ||||
|             "args": ["${workspaceFolder}/debug_bld/subprojects/libft/libft.a"], | ||||
|             "preLaunchTask": "build", | ||||
|             "stopAtEntry": false, | ||||
|             "cwd": "${workspaceFolder}", | ||||
|             "environment": [], | ||||
|             "externalConsole": false, | ||||
|             "MIMode": "gdb", | ||||
|             "osx": { | ||||
|                 "MIMode": "lldb" | ||||
|             } | ||||
|  |  | |||
							
								
								
									
										27
									
								
								src/ar.c
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								src/ar.c
									
										
									
									
									
								
							|  | @ -1,6 +1,31 @@ | |||
| #include "ft_nm.h" | ||||
| #include "libft.h" | ||||
| #include <ar.h> | ||||
| 
 | ||||
| 
 | ||||
| void	ar(t_nm_file *file) | ||||
| { | ||||
| 	(void)file; | ||||
| 	struct ar_hdr	*runner; | ||||
| 	char			*long_name; | ||||
| 	size_t			offset; | ||||
| 	t_nm_file		obj; | ||||
| 
 | ||||
| 
 | ||||
| 	runner = file->file + SARMAG; | ||||
| 	while ((void *)runner < file->file + file->size) | ||||
| 	{ | ||||
| 		if (ft_strncmp(runner->ar_name, AR_EFMT1, 3) == 0) | ||||
| 		{ | ||||
| 			offset = ft_atoi(&runner->ar_name[3]); | ||||
| 			long_name = (char *)runner + sizeof(struct ar_hdr); | ||||
| 			ft_putstr("\n"); | ||||
| 			ft_putstr(long_name); | ||||
| 			ft_putstr("\n"); | ||||
| 			obj.file = (void *)((size_t)runner + sizeof(struct ar_hdr) + offset); | ||||
| 			obj.size = ft_atoi(runner->ar_size) - offset; | ||||
| 			if (*(uint32_t *)obj.file == MH_MAGIC_64) | ||||
| 				macho64(&obj); | ||||
| 		} | ||||
| 		runner = (struct ar_hdr *)((size_t)runner + ft_atoi(runner->ar_size) + sizeof(struct ar_hdr)); | ||||
| 	} | ||||
| } | ||||
|  | @ -6,7 +6,7 @@ | |||
| /*   By: gtertysh <gtertysh@student.unit.ua>        +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2019/07/13 14:52:27 by gtertysh          #+#    #+#             */ | ||||
| /*   Updated: 2019/07/27 19:35:42 by gtertysh         ###   ########.fr       */ | ||||
| /*   Updated: 2019/07/31 21:37:00 by gtertysh         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
| 
 | ||||
|  | @ -19,6 +19,7 @@ void		hanldle_file(const char *filename) | |||
| 	t_nm_file	file; | ||||
| 	uint32_t	magic; | ||||
| 
 | ||||
| 	// create dispatch table for this bullshit
 | ||||
| 	init_file(&file); | ||||
| 	open_file(filename, &file); | ||||
| 	magic = *(uint32_t *)file.file; | ||||
|  | @ -28,6 +29,8 @@ void		hanldle_file(const char *filename) | |||
| 		macho32(&file); | ||||
| 	else if (magic == FAT_CIGAM) | ||||
| 		fat(&file); | ||||
| 	else if (ft_strncmp(file.file, ARMAG, SARMAG) == 0) | ||||
| 		ar(&file); | ||||
| 	else | ||||
| 		ft_putstr("invalid magic number."); | ||||
| 	close_file(&file); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue