Rev | Line | |
---|
[9] | 1 | /* size - tell size of an object file Author: Andy Tanenbaum */
|
---|
| 2 |
|
---|
| 3 | #include <sys/types.h>
|
---|
| 4 | #include <fcntl.h>
|
---|
| 5 | #include <a.out.h>
|
---|
| 6 | #include <stdlib.h>
|
---|
| 7 | #include <unistd.h>
|
---|
| 8 | #include <stdio.h>
|
---|
| 9 |
|
---|
| 10 | int heading; /* set when heading printed */
|
---|
| 11 | int error;
|
---|
| 12 |
|
---|
| 13 | _PROTOTYPE(int main, (int argc, char **argv));
|
---|
| 14 | _PROTOTYPE(void size, (char *name));
|
---|
| 15 |
|
---|
| 16 | int main(argc, argv)
|
---|
| 17 | int argc;
|
---|
| 18 | char *argv[];
|
---|
| 19 | {
|
---|
| 20 | int i;
|
---|
| 21 |
|
---|
| 22 | if (argc == 1) {
|
---|
| 23 | size("a.out");
|
---|
| 24 | exit(error);
|
---|
| 25 | }
|
---|
| 26 | for (i = 1; i < argc; i++) size(argv[i]);
|
---|
| 27 | return(error);
|
---|
| 28 | }
|
---|
| 29 |
|
---|
| 30 |
|
---|
| 31 |
|
---|
| 32 | void size(name)
|
---|
| 33 | char *name;
|
---|
| 34 | {
|
---|
| 35 | int fd, separate;
|
---|
| 36 | long dynam, allmem;
|
---|
| 37 | struct exec exec;
|
---|
| 38 |
|
---|
| 39 | if ((fd = open(name, O_RDONLY)) < 0) {
|
---|
| 40 | fprintf(stderr, "size: can't open %s\n", name);
|
---|
| 41 | error = 1;
|
---|
| 42 | return;
|
---|
| 43 | }
|
---|
| 44 | if (read(fd, (char *)&exec, sizeof(struct exec)) != sizeof(struct exec)) {
|
---|
| 45 | fprintf(stderr, "size: %s: header too short\n", name);
|
---|
| 46 | error = 1;
|
---|
| 47 | close(fd);
|
---|
| 48 | return;
|
---|
| 49 | }
|
---|
| 50 | if (BADMAG(exec)) {
|
---|
| 51 | fprintf(stderr, "size: %s not an object file\n", name);
|
---|
| 52 | error = 1;
|
---|
| 53 | close(fd);
|
---|
| 54 | return;
|
---|
| 55 | }
|
---|
| 56 | separate = (exec.a_flags & A_SEP ? 1 : 0);
|
---|
| 57 | dynam = exec.a_total - exec.a_text - exec.a_data - exec.a_bss;
|
---|
| 58 | if (separate) dynam += exec.a_text;
|
---|
| 59 | allmem = (separate ? exec.a_total + exec.a_text : exec.a_total);
|
---|
| 60 | if (heading++ == 0) printf(" text data bss stack memory\n");
|
---|
| 61 | printf("%7ld %7ld %7ld %8ld %8ld %s\n",
|
---|
| 62 | exec.a_text, exec.a_data, exec.a_bss, dynam, allmem, name);
|
---|
| 63 | close(fd);
|
---|
| 64 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.