@@ -110,6 +110,7 @@ static int main_help(RZ_BORROW RZ_NONNULL RzCore *core, int line) {
110110 "-d" , "" , "Debug the executable 'file' or running process 'pid'" ,
111111 "-D" , "backend" , "Enable debug mode (e cfg.debug=true)" ,
112112 "-e" , "k=v" , "Evaluate config var" ,
113+ "-E" , "endian" , "Endianness -E big or -E little" ,
113114 "-f" , "" , "Block size = file size" ,
114115 "-F" , "binplug" , "Force to use that rbin plugin" ,
115116 "-h, -hh" , "" , "Show help message, -hh for long" ,
@@ -434,6 +435,7 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
434435 ut64 mapaddr = 0LL ;
435436 bool quiet = false;
436437 int is_gdb = false;
438+ ut32 endianness = RZ_SYS_ENDIAN_NONE ;
437439 const char * s_seek = NULL ;
438440 bool compute_hashes = true;
439441 RzList * cmds = rz_list_new ();
@@ -502,7 +504,7 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
502504 char * debugbackend = rz_str_dup ("native" );
503505
504506 RzGetopt opt ;
505- rz_getopt_init (& opt , argc , argv , "=012AMCwxfF:H:hm:e:nk:NdqQs:p:b:B:a:Lui:I:l:R:r:c:D:vVSTzuXt" );
507+ rz_getopt_init (& opt , argc , argv , "=012AMCwxfF:H:hm:E: e:nk:NdqQs:p:b:B:a:Lui:I:l:R:r:c:D:vVSTzuXt" );
506508 while (argc >= 2 && (c = rz_getopt_next (& opt )) != -1 ) {
507509 switch (c ) {
508510 case '-' :
@@ -581,11 +583,38 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
581583 case 'e' :
582584 if (!strcmp (opt .arg , "q" )) {
583585 rz_core_cmd0 (r , "eq" );
586+ } else if (rz_str_startswith (opt .arg , "asm.arch" )) {
587+ RZ_LOG_ERROR ("use -a argument for setting the arch name\n" );
588+ ret = 1 ;
589+ goto beach ;
590+ } else if (rz_str_startswith (opt .arg , "asm.bits" )) {
591+ RZ_LOG_ERROR ("use -b argument for setting the arch bits\n" );
592+ ret = 1 ;
593+ goto beach ;
594+ } else if (rz_str_startswith (opt .arg , "asm.os" )) {
595+ RZ_LOG_ERROR ("use -k argument for setting the OS/kern\n" );
596+ ret = 1 ;
597+ goto beach ;
598+ } else if (rz_str_startswith (opt .arg , "cfg.bigendian" )) {
599+ RZ_LOG_ERROR ("use -E argument for setting the endianness\n" );
600+ ret = 1 ;
601+ goto beach ;
584602 } else {
585- rz_config_eval (r -> config , opt .arg );
603+ rz_config_eval (r -> config , ( void * ) opt .arg );
586604 rz_list_append (evals , (void * )opt .arg );
587605 }
588606 break ;
607+ case 'E' :
608+ if (RZ_STR_EQ (opt .arg , "big" )) {
609+ endianness = RZ_SYS_ENDIAN_BIG ;
610+ } else if (RZ_STR_EQ (opt .arg , "little" )) {
611+ endianness = RZ_SYS_ENDIAN_LITTLE ;
612+ } else {
613+ RZ_LOG_ERROR ("Invalid endianness value '%s'\n" , opt .arg );
614+ ret = 1 ;
615+ goto beach ;
616+ }
617+ break ;
589618 case 'f' :
590619 fullfile = true;
591620 break ;
@@ -956,6 +985,9 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
956985 if (asmos ) {
957986 rz_config_set (r -> config , "asm.os" , asmos );
958987 }
988+ if (endianness != RZ_SYS_ENDIAN_NONE ) {
989+ rz_config_set_b (r -> config , "cfg.bigendian" , endianness == RZ_SYS_ENDIAN_BIG );
990+ }
959991 // TODO: load rbin thing
960992 } else {
961993 RZ_LOG_ERROR ("Cannot slurp from stdin\n" );
@@ -1089,7 +1121,9 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
10891121 if (asmos ) {
10901122 rz_config_set (r -> config , "asm.os" , asmos );
10911123 }
1092-
1124+ if (endianness != RZ_SYS_ENDIAN_NONE ) {
1125+ rz_config_set_b (r -> config , "cfg.bigendian" , endianness == RZ_SYS_ENDIAN_BIG );
1126+ }
10931127 if (!debug || debug == 2 ) {
10941128 const char * dbg_profile = rz_config_get (r -> config , "dbg.profile" );
10951129 if (opt .ind == argc && dbg_profile && * dbg_profile ) {
@@ -1249,10 +1283,6 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
12491283 if (mapaddr ) {
12501284 rz_core_seek (r , mapaddr , true);
12511285 }
1252- rz_list_foreach (evals , iter , cmdn ) {
1253- rz_config_eval (r -> config , cmdn );
1254- rz_cons_flush ();
1255- }
12561286 if (asmarch ) {
12571287 rz_config_set (r -> config , "asm.arch" , asmarch );
12581288 }
@@ -1262,7 +1292,13 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
12621292 if (asmos ) {
12631293 rz_config_set (r -> config , "asm.os" , asmos );
12641294 }
1265-
1295+ if (endianness != RZ_SYS_ENDIAN_NONE ) {
1296+ rz_config_set_b (r -> config , "cfg.bigendian" , endianness == RZ_SYS_ENDIAN_BIG );
1297+ }
1298+ rz_list_foreach (evals , iter , cmdn ) {
1299+ rz_config_eval (r -> config , cmdn );
1300+ rz_cons_flush ();
1301+ }
12661302 debug = r -> file && iod && (r -> file -> fd == iod -> fd ) && iod -> plugin &&
12671303 (iod -> plugin -> isdbg || (debug == 2 && !strcmp (iod -> plugin -> name , "dmp" )));
12681304 if (debug ) {
@@ -1336,10 +1372,6 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
13361372 } else {
13371373 rz_core_block_read (r );
13381374
1339- rz_list_foreach (evals , iter , cmdn ) {
1340- rz_config_eval (r -> config , cmdn );
1341- rz_cons_flush ();
1342- }
13431375 if (asmarch ) {
13441376 rz_config_set (r -> config , "asm.arch" , asmarch );
13451377 }
@@ -1349,6 +1381,13 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
13491381 if (asmos ) {
13501382 rz_config_set (r -> config , "asm.os" , asmos );
13511383 }
1384+ if (endianness != RZ_SYS_ENDIAN_NONE ) {
1385+ rz_config_set_b (r -> config , "cfg.bigendian" , endianness == RZ_SYS_ENDIAN_BIG );
1386+ }
1387+ rz_list_foreach (evals , iter , cmdn ) {
1388+ rz_config_eval (r -> config , cmdn );
1389+ rz_cons_flush ();
1390+ }
13521391 }
13531392 {
13541393 char * global_rc = rz_path_system_rc (r -> sys_path );
0 commit comments