Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void printItem(char* name, int* item, int gaps);
- void printItemStr(char* name, char* item, int gaps);
- void printArgList(int argc, char ** argv);
- void printArgListSTR(int argc, char ** argv);
- void PrintMap(int argc,char ** argv, int mode);
- int *argcP=0;
- char*** argvP=0;
- void separatorLine(int mode);
- int main(int argc, char ** argv) {
- PrintMap(argc,argv,0);
- PrintMap(argc,argv,1);
- return 0;
- }
- void PrintMap(int argc,char ** argv,int mode){
- int i=0;
- argcP=&argc;
- argvP=&argv;
- char namebuf[12];
- if(mode){
- printf("Memory map filled with the command and parameters in ASCII text and others in hexadecimals.\n\n");
- } else {
- printf("Memory map filled with hexa decimals only:\n\n");
- }
- separatorLine(2);
- separatorLine(0);
- separatorLine(0);
- //TODO print args in reverse order
- separatorLine(0);
- // if(mode){
- // printArgListSTR(argc,argv);
- // } else {
- // printArgList(argc,argv);
- // }
- separatorLine(0);
- separatorLine(0);
- //TODO print arg pointers in reverse order
- separatorLine(0);
- i=argc-1;
- while(i>=0){
- sprintf(namebuf,"argv+%i",i);
- printItem(namebuf,(int*)(argv+i),0);
- i--;
- }
- separatorLine(0);
- separatorLine(0);
- //TODO print argv and argc
- separatorLine(0);
- printItem("argv",argvP,0);
- printItem("argc",argcP,0);
- separatorLine(0);
- separatorLine(0);
- separatorLine(1);
- printf("\n\n\n\n\n");
- }
- void separatorLine(int mode){
- printf("%-7s","");
- printf("+------+------+------+------+");
- if(mode == 1){
- printf(" 00000000");
- } else if(mode == 2){
- printf(" FFFFFFFF");
- }
- printf("\n");
- }
- void printItem(char* name, int* item, int gaps){
- if(name){
- printf("%-7s",name);
- } else{
- printf("%-7s","");
- }
- switch(gaps){
- case 0:
- printf("| %02X | %02X | %02X | %02X | %08X\n",(*item >> (8*3)) & 0xFF, (*item >> (8*2)) & 0xFF,(*item >> 8) & 0xFF, *item & 0xFF,(unsigned int)item);
- break;
- case 1:
- printf("| -- | %02X | %02X | %02X | %08X\n", (*item >> (8*2)) & 0xFF,(*item >> 8) & 0xFF, *item & 0xFF,(unsigned int)item);
- break;
- case 2:
- printf("| -- | -- | %02X | %02X | %08X\n",(*item >> 8) & 0xFF, *item & 0xFF,(unsigned int)item);
- break;
- case 3:
- printf("| -- | -- | -- | %02X | %08X\n", *item & 0xFF,(unsigned int)item);
- break;
- default:
- break;
- }
- separatorLine(0);
- }
- void printItemStr(char* name, char* item, int gaps){
- if(name){
- printf("%-7s",name);
- } else{
- printf("%-7s","");
- }
- char ch1[3]={0,0,0};
- char ch2[3]={0,0,0};
- char ch3[3]={0,0,0};
- char ch4[3]={0,0,0};
- if(gaps < 1){
- if(item[3] == '\0'){
- ch4[0]='\\';
- ch4[1]='0';
- } else {
- ch4[0] = item[3];
- }
- }
- if(gaps < 2){
- if(item[2] == '\0'){
- ch3[0]='\\';
- ch3[1]='0';
- } else {
- ch3[0] = item[2];
- }
- }
- if(gaps < 3){
- if(item[1] == '\0'){
- ch2[0]='\\';
- ch2[1]='0';
- } else {
- ch2[0] = item[1];
- }
- }
- if(item[0] == '\0'){
- ch1[0]='\\';
- ch1[1]='0';
- } else {
- ch1[0] = item[0];
- }
- printf("| %-2s | %-2s | %-2s | %-2s | %08X\n",ch4, ch3, ch2, ch1,(unsigned int)item);
- separatorLine(0);
- }
- void printArgList(int argc, char ** argv){
- size_t sz=0;
- void* stopPos=0;
- int pos=0;
- char* ptr=0;
- unsigned int gaps=0;
- while(argv[argc-1][pos]){
- pos++;
- }
- stopPos=&(argv[argc-1][pos]);
- sz=((unsigned int)stopPos-(unsigned int)(*argv))+1;
- gaps=4-sz % 4;
- if(gaps == 4){gaps=0;}
- // printf("\n%X\n",(unsigned int)stopPos);
- // printf("%i\n",((unsigned int) stopPos)-((unsigned int)(*argv)));
- // fprintf(stderr,"size: %u, gaps: %u, *argv: %08X, stopPos: %08X\n",sz,gaps,(unsigned)*argv,(unsigned)stopPos);
- ptr=*argv+sz-(sz%4);
- printItem(0,(int*)ptr,gaps);
- ptr-=4;
- while((char*)ptr >= *argv){
- printItem(0,(int*)ptr,0);
- ptr-=4;
- }
- }
- void printArgListSTR(int argc, char ** argv){
- size_t sz=0;
- void* stopPos=0;
- int pos=0;
- char* ptr=0;
- unsigned int gaps=0;
- while(argv[argc-1][pos]){
- pos++;
- }
- stopPos=&(argv[argc-1][pos]);
- sz=((unsigned int)stopPos-(unsigned int)(*argv))+1;
- gaps=4-sz % 4;
- if(gaps == 4){gaps=0;}
- // printf("\n%X\n",(unsigned int)stopPos);
- // printf("%i\n",((unsigned int) stopPos)-((unsigned int)(*argv)));
- // fprintf(stderr,"size: %u, gaps: %u, *argv: %08X, stopPos: %08X\n",sz,gaps,(unsigned)*argv,(unsigned)stopPos);
- ptr=*argv+sz-(sz%4);
- printItemStr(0,ptr,gaps);
- ptr-=4;
- while(ptr >= *argv){
- printItemStr(0,ptr,0);
- ptr-=4;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement