to write shell code in linux, we always want to see the execute code, so i write a hex edit myself.
the flowing is scoure. (it can only view execute code, can't edit it, but i will add it after, if i have time)
#include <stdio.h>
#define ONCE_READ 16
int main(int argc,char *argv[])
{
int i;
FILE *pfile;
unsigned char buf[ONCE_READ];
int ret = 0x10;
int size = 0;
if(argc<2)
{
printf("two few arguments");
return 0;
}
printf("/n/n");
pfile=fopen(argv[1],"r");
while(1)
{
if(ret == ONCE_READ) printf("%08x ",size);
ret = fread(buf,sizeof(buf[0]),ONCE_READ,pfile);
if(ret == 0)break;
size += ret;
for(i=0;i<ONCE_READ;i++)
{
if(i%4 == 0)
printf(" ");
if(i<ret)
printf("%02x ",buf[i]);
else
printf(" ");
}
printf(" ");
for(i=0;i<ret;i++)
{
if(buf[i]>=33 && buf[i]<=126)
printf("%c",buf[i]);
else printf(".");
}
printf("/n");
}
fclose(pfile);
printf("/n/n total %d byte/n/n",size);
return 0;
}
the flowing is scoure. (it can only view execute code, can't edit it, but i will add it after, if i have time)
#include <stdio.h>
#define ONCE_READ 16
int main(int argc,char *argv[])
{
int i;
FILE *pfile;
unsigned char buf[ONCE_READ];
int ret = 0x10;
int size = 0;
if(argc<2)
{
printf("two few arguments");
return 0;
}
printf("/n/n");
pfile=fopen(argv[1],"r");
while(1)
{
if(ret == ONCE_READ) printf("%08x ",size);
ret = fread(buf,sizeof(buf[0]),ONCE_READ,pfile);
if(ret == 0)break;
size += ret;
for(i=0;i<ONCE_READ;i++)
{
if(i%4 == 0)
printf(" ");
if(i<ret)
printf("%02x ",buf[i]);
else
printf(" ");
}
printf(" ");
for(i=0;i<ret;i++)
{
if(buf[i]>=33 && buf[i]<=126)
printf("%c",buf[i]);
else printf(".");
}
printf("/n");
}
fclose(pfile);
printf("/n/n total %d byte/n/n",size);
return 0;
}