rdx.c
来自「汇编编译器的最新版本的源码.买了自己动手写操作系统这本书的人一定要下」· C语言 代码 · 共 60 行
C
60 行
/* rdx.c RDOFF Object File loader program
*
* The Netwide Assembler is copyright (C) 1996 Simon Tatham and
* Julian Hall. All rights reserved. The software is
* redistributable under the license given in the file "LICENSE"
* distributed in the NASM archive.
*/
/* note: most of the actual work of this program is done by the modules
"rdfload.c", which loads and relocates the object file, and by "rdoff.c",
which contains general purpose routines to manipulate RDOFF object
files. You can use these files in your own program to load RDOFF objects
and execute the code in them in a similar way to what is shown here. */
#include "compiler.h"
#include <stdio.h>
#include <stdlib.h>
#include "rdfload.h"
#include "symtab.h"
typedef int (*main_fn) (int, char **); /* Main function prototype */
int main(int argc, char **argv)
{
rdfmodule *m;
main_fn code;
symtabEnt *s;
if (argc < 2) {
puts("usage: rdx <rdoff-executable> [params]\n");
exit(255);
}
m = rdfload(argv[1]);
if (!m) {
rdfperror("rdx", argv[1]);
exit(255);
}
rdf_relocate(m); /* in this instance, the default relocation
values will work fine, but they may need changing
in other cases... */
s = symtabFind(m->symtab, "_main");
if (!s) {
fprintf(stderr, "rdx: could not find symbol '_main' in '%s'\n",
argv[1]);
exit(255);
}
code = (main_fn)(size_t) s->offset;
argv++, argc--; /* remove 'rdx' from command line */
return code(argc, argv); /* execute */
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?