Skip to main content

[AWK] C struct to fprintf script

example code

#!/bin/bash

awk ' { if ($1 == "u_int" ) FORMAT="%u"; \
else if ($1 == "u_short" ) FORMAT="%u"; \
else if ($1 == "uint64_t" ) FORMAT="%lu"; \
else if ($1 == "int" ) FORMAT="%d"; \
else if ($1 == "int32_t" ) FORMAT="%d"; \
else if ($1 == "int64_t" ) FORMAT="%ld"; \
else if ($1 == "u_char" ) FORMAT="%s"; \
else if ($1 == "char" ) FORMAT="%s"; \
else FORMAT="ERROR"; \
if ( substr($2,length($2),1) == ";" ) KEY=substr($2,0, length($2)-1);
else KEY=$2; \
print "fprintf(stdout, \"" KEY "= [" FORMAT "]\\n\", p_x->" KEY " );" } ' a.dat


# a.dat
typedef struct {
      u_int    m1;
      int myport;
      u_short  ushort2;
      u_int    int1;
      u_short  data;
      u_char   dummy[8];
      uint64_t length;
      char kkk       [  1 + 1];
} my_struct;

# output
fprintf(stdout, "struct= [ERROR]\n", p_x->struct );
fprintf(stdout, "m1= [%u]\n", p_x->m1 );
fprintf(stdout, "myport= [%d]\n", p_x->myport );
fprintf(stdout, "ushort2= [%u]\n", p_x->ushort2 );
fprintf(stdout, "int1= [%u]\n", p_x->int1 );
fprintf(stdout, "data= [%u]\n", p_x->data );
fprintf(stdout, "dummy[8]= [%s]\n", p_x->dummy[8] );
fprintf(stdout, "length= [%lu]\n", p_x->length );
fprintf(stdout, "kkk= [%s]\n", p_x->kkk );
fprintf(stdout, "my_struct= [ERROR]\n", p_x->my_struct );


# To-do
 1. support pointer
 2. add types
 3. "unsigned int" ....

Comments

Popular posts from this blog

sanitize on in CMakeLists.txt

1. CMakeLists.txt set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") add_compile_options(-fsanitize=address) If a subdir is set with add_subdirectory and a module that does not support sanitize is imported from the path and needs to be removed, add -fno-sanitize=address to add_compile_options in CMakeLists.txt of the subdir to remove it. Basically, if you enable sanitize, sanitize will adjust ulimit's core to 0, so core will not occur. You can do this by putting the following part as an environment variable. (Below is the part you put in systemd's service) 2. service file in systemd [Service] LimitCORE=infinity Environment="ASAN_OPTIONS=handle_segv=0:handle_abort=1:abort_on_error=1:disable_coredump=0"

[bash-script] get_info.sh print cpu allocation infomation of threads

1) way1 ps xH -o 'pid tid cmd comm pcpu psr' 2) way2 #!/bin/bash TMP_FILE=$(mktemp /tmp/abc-script.XXXXXX) echo ${TMP_FILE} ps xH -o 'pid tid cmd comm pcpu ' > ${TMP_FILE} function make_header() {   echo -n "$1"   echo " psr" } function make_values() {   echo -n "$1"   STATUS_FILE=/proc/${2}/task/${3}/status   if [ -f ${STATUS_FILE} ] ; then     CPU_SET=`cat ${STATUS_FILE}  |grep Cpus_allowed_list |awk ' { print $2 } '`   else     CPU_SET="None"   fi   echo " ${CPU_SET}" } let IDX=0 while IFS='' read -r line || [[ -n "$line" ]]; do    LINE_SEP=( $line )    MY_PID=${LINE_SEP[0]}    MY_TID=${LINE_SEP[1]}    if [ ${IDX} -eq 0 ]; then      SZ_HEADER=`make_header "$line"`      echo ${SZ_HEADER}    else      SZ_VALUES=`make_values "$line" ${MY_PID} ${MY_TID}`      echo ${SZ_VALUES}...

linux file system recovery

1. broken hdd disk backup  1) remote-server nc -v -l [port] > hdd_backup.img  2) equipment of broken hdd dd if=/dev/sda | nc -v [remote-server IP] [port]   ex)  1) remote-server nc -v -l 2222 > hdd_backup.img  2) equipment of broken hdd dd if=/dev/sda | nc -v 1.1.1.1 2222 2. use recovery tool  testdisk (http://www.cgsecurity.org/wiki/TestDisk_Download) 3. run fsck from img file  # losetup --offset 32256 /dev/loop2 harddrive.img  # fsck /dev/loop2  and again testdisk reference: https://major.io/2010/12/14/mounting-a-raw-partition-file-made-with-dd-or-dd_rescue-in-linux/ https://bbs.archlinux.org/viewtopic.php?id=136766