mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-09 11:53:39 +00:00
Fix #358 - ragg2 now can create binaries from .asm/.s files
This commit is contained in:
parent
39414a7a62
commit
a249adb519
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
static int usage (int v) {
|
static int usage (int v) {
|
||||||
printf ("Usage: ragg2 [-FOLsrxvh] [-a arch] [-b bits] [-k os] [-o file] [-I /] [-i sc]\n"
|
printf ("Usage: ragg2 [-FOLsrxvh] [-a arch] [-b bits] [-k os] [-o file] [-I /] [-i sc]\n"
|
||||||
" [-e enc] [-B hex] [-c k=v] [-C file] [-dDw v] [-p pad] file|-\n");
|
" [-e enc] [-B hex] [-c k=v] [-C file] [-dDw v] [-p pad] file|f.asm|-\n");
|
||||||
if (v) printf (
|
if (v) printf (
|
||||||
" -a [arch] select architecture (x86, mips, arm)\n"
|
" -a [arch] select architecture (x86, mips, arm)\n"
|
||||||
" -b [bits] register size (32, 64, ..)\n"
|
" -b [bits] register size (32, 64, ..)\n"
|
||||||
@ -67,9 +67,12 @@ static int create (const char *format, const char *arch, int bits, const ut8 *co
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int openfile (const char *f, int x) {
|
static int openfile (const char *f, int x) {
|
||||||
int fd = open (f, O_RDWR|O_CREAT, 0644);
|
int fd = open (f, O_RDWR|O_CREAT, 0644);
|
||||||
if (fd == -1) return -1;
|
if (fd == -1) {
|
||||||
|
fd = open (f, O_RDWR);
|
||||||
|
if (fd == -1) return -1;
|
||||||
|
}
|
||||||
#if __UNIX__
|
#if __UNIX__
|
||||||
if (x) fchmod (fd, 0755);
|
if (x) fchmod (fd, 0755);
|
||||||
#endif
|
#endif
|
||||||
@ -78,7 +81,7 @@ int openfile (const char *f, int x) {
|
|||||||
dup2 (fd, 1);
|
dup2 (fd, 1);
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
#define ISEXEC (*format!='r')
|
#define ISEXEC (fmt!='r')
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
const char *file = NULL;
|
const char *file = NULL;
|
||||||
@ -95,6 +98,7 @@ int main(int argc, char **argv) {
|
|||||||
char *shellcode = NULL;
|
char *shellcode = NULL;
|
||||||
char *encoder = NULL;
|
char *encoder = NULL;
|
||||||
int bits = 32;
|
int bits = 32;
|
||||||
|
int fmt = 0;
|
||||||
const char *ofile = NULL;
|
const char *ofile = NULL;
|
||||||
int ofileauto = 0;
|
int ofileauto = 0;
|
||||||
RBuffer *b;
|
RBuffer *b;
|
||||||
@ -243,14 +247,20 @@ int main(int argc, char **argv) {
|
|||||||
r_egg_load (egg, buf, 0);
|
r_egg_load (egg, buf, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!r_egg_include (egg, file, 0)) {
|
if (strstr (file, ".s") || strstr (file, ".asm"))
|
||||||
|
fmt = 'a';
|
||||||
|
else fmt = 0;
|
||||||
|
if (!r_egg_include (egg, file, fmt)) {
|
||||||
eprintf ("Cannot open '%s'\n", file);
|
eprintf ("Cannot open '%s'\n", file);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!r_egg_compile (egg)) {
|
if (!r_egg_compile (egg)) {
|
||||||
return 1;
|
if (!fmt) {
|
||||||
|
eprintf ("r_egg_compile: fail\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (shellcode) {
|
if (shellcode) {
|
||||||
if (!r_egg_shellcode (egg, shellcode)) {
|
if (!r_egg_shellcode (egg, shellcode)) {
|
||||||
@ -320,13 +330,18 @@ int main(int argc, char **argv) {
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
r_egg_finalize (egg); // apply patches
|
r_egg_finalize (egg); // apply patches
|
||||||
|
if (show_execute)
|
||||||
|
return r_egg_run (egg);
|
||||||
|
|
||||||
if (show_raw) {
|
if (show_raw) {
|
||||||
write (1, b->buf, b->length);
|
write (1, b->buf, b->length);
|
||||||
} else
|
|
||||||
if (show_execute) {
|
|
||||||
return r_egg_run (egg);
|
|
||||||
} else {
|
} else {
|
||||||
switch (*format) {
|
if (!format) {
|
||||||
|
eprintf ("No format specified wtf\n");
|
||||||
|
r_egg_free (egg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
switch (*format) { //*format) {
|
||||||
case 'r':
|
case 'r':
|
||||||
if (show_hex) {
|
if (show_hex) {
|
||||||
for (i=0; i<b->length; i++)
|
for (i=0; i<b->length; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user