17 static int print_write(io_write write,
unsigned int *len,
unsigned int size,
uchar *str,
unsigned int slen)
19 if((size != 0) && (slen > (size - *len))) {
23 write(str, (
unsigned int)slen);
27 if((size != 0) && (*len >= size)) {
55 int vtprintf(io_write write,
const char *fmt,
unsigned int size, va_list args)
57 uchar str[MAXFORMATSTR];
59 unsigned int strlen = 0;
66 SYSERR_PRINT(
"write = 0\n");
79 if(print_write(write, &len, size, (
uchar *)
"\r", 1) != 0) {
84 if(print_write(write, &len, size, (
uchar *)fmt, 1) != 0) {
89 if((
'0' <= *fmt) && (*fmt <=
'9')) {
95 strlen = (strlen*10) + *fmt -
'0';
98 strlen = (strlen*10) + *fmt -
'0';
103 if(print_write(write, &len, size, (
uchar *)
"%", 1) != 0) {
121 for(i=0; i<strlen; i++) {
123 if(print_write(write, &len, size, p, 1) != 0) {
128 if(print_write(write, &len, size, (
uchar *)
" ", 1) != 0) {
136 if((size != 0) && (slen > (size - len))) {
139 if(print_write(write, &len, size, p, slen) != 0) {
151 long val = va_arg(args,
long);
152 (void)
itods(str, MAXFORMATSTR-1, val);
153 }
else if(flong == 2) {
154 long long val = va_arg(args,
long long);
156 val = (val >> 32) | (val << 32);
158 (void)
lltods(str, MAXFORMATSTR-1, val);
160 int val = va_arg(args,
int);
161 (void)
itods(str, MAXFORMATSTR-1, val);
164 p<&str[MAXFORMATSTR];
168 if((size != 0) && (slen > (size - len))) {
171 if(print_write(write, &len, size, p, slen) != 0) {
180 long val = va_arg(args,
long);
181 (void)
itodsz(str, strlen, val);
182 }
else if(flong == 2) {
183 long long val = va_arg(args,
long long);
185 val = (val >> 32) | (val << 32);
187 (void)
lltodsz(str, strlen, val);
189 int val = va_arg(args,
int);
190 (void)
itodsz(str, strlen, val);
194 long val = va_arg(args,
long);
195 (void)
itods(str, strlen, val);
196 }
else if(flong == 2) {
197 long long val = va_arg(args,
long long);
199 val = (val >> 32) | (val << 32);
201 (void)
lltods(str, strlen, val);
203 int val = va_arg(args,
int);
204 (void)
itods(str, strlen, val);
208 if((size != 0) && (slen > (size - len))) {
211 if(print_write(write, &len, size, str, slen) != 0) {
222 unsigned long val = va_arg(args,
unsigned long);
223 (void)
uitods(str, MAXFORMATSTR-1, (
unsigned int)val);
224 }
else if(flong == 2) {
225 unsigned long long val = va_arg(args,
unsigned long long);
227 val = (val >> 32) | (val << 32);
229 (void)
ulltods(str, MAXFORMATSTR-1, val);
231 unsigned int val = va_arg(args,
unsigned int);
232 (void)
uitods(str, MAXFORMATSTR-1, val);
235 p<&str[MAXFORMATSTR];
239 if((size != 0) && (slen > (size - len))) {
242 if(print_write(write, &len, size, p, slen) != 0) {
252 unsigned long val = va_arg(args,
unsigned long);
253 (void)
uitodsz(str, strlen, (
unsigned int)val);
254 }
else if(flong == 2) {
255 unsigned long long val = va_arg(args,
unsigned long long);
257 val = (val >> 32) | (val << 32);
261 unsigned int val = va_arg(args,
unsigned int);
262 (void)
uitodsz(str, strlen, val);
266 unsigned long val = va_arg(args,
unsigned long);
267 (void)
uitods(str, strlen, (
unsigned int)val);
268 }
else if(flong == 2) {
269 unsigned long long val = va_arg(args,
unsigned long long);
271 val = (val >> 32) | (val << 32);
273 (void)
ulltods(str, strlen, val);
275 unsigned int val = va_arg(args,
unsigned int);
276 (void)
uitods(str, strlen, val);
280 if((size != 0) && (slen > (size - len))) {
283 if(print_write(write, &len, size, str, slen) != 0) {
293 long val = va_arg(args,
long);
295 strlen = (
unsigned int)
sizeof(
long)*2;
297 (void)
itohs(str, strlen, val);
298 }
else if(flong == 2) {
299 long long val = va_arg(args,
long long);
301 strlen = (
unsigned int)
sizeof(
long)*4;
304 val = (val >> 32) | (val << 32);
306 (void)
lltohs(str, strlen, val);
308 int val = va_arg(args,
int);
310 strlen = (
unsigned int)
sizeof(
int)*2;
312 (void)
itohs(str, strlen, val);
318 if((size != 0) && (slen > (size - len))) {
321 if(print_write(write, &len, size, str, slen) != 0) {
330 data[0] = (
uchar)va_arg(args,
int);
331 if(print_write(write, &len, size, data, 1) != 0) {
341 (void)
lltohs(str, 16, va_arg(args,
long long));
343 (void)
itohs(str, 8, va_arg(args,
int));
349 if((size != 0) && (slen > (size - len))) {
353 if(print_write(write, &len, size, str+8, slen) != 0) {
357 if(print_write(write, &len, size, str, slen) != 0) {
377 void vxdump(
unsigned int addr,
unsigned char *data,
unsigned int len,
380 int(* print)(
const char *fmt, ...))
386 case XDUMP_ADDR_ANY_WORD:
387 print(
"%04X : ", addr + i);
390 case XDUMP_ADDR_ANY_LONG:
391 print(
"%08X : ", addr + i);
394 case XDUMP_ADDR_DATA_ADDR:
395 print(
"%p : ", data);
399 print(
"%p : ", data);
404 cbuf[i % 16] = *data;
407 print(
"%02X ", *data);
410 case XDUMP_DATA_WORD:
412 if(((
unsigned long long)data % 2) == 0) {
414 if(((
unsigned long)data % 2) == 0) {
416 print(
"%04lX ", *(
unsigned long *)data);
420 case XDUMP_DATA_LONG:
422 if(((
unsigned long long)data % 4) == 0) {
424 if(((
unsigned long)data % 4) == 0) {
426 print(
"%08lX ", *(
unsigned long *)data);
431 print(
"%02X ", *data);
442 for(j=0; j<16; j++) {
443 if((
' ' <= cbuf[j]) && (cbuf[j] <=
'~')) {
444 print(
"%c", cbuf[j]);
452 case XDUMP_ADDR_ANY_WORD:
453 print(
"\n%04X : ", addr + i);
456 case XDUMP_ADDR_ANY_LONG:
457 print(
"\n%08X : ", addr + i);
460 case XDUMP_ADDR_DATA_ADDR:
461 print(
"\n%p : ", data);
477 for(j=0; j<(16-(i % 16)); j++) {
481 for(j=0; j<(i % 16); j++) {
482 if((
' ' <= cbuf[j]) && (cbuf[j] <=
'~')) {
483 print(
"%c", cbuf[j]);
unsigned char uchar
GadgetSeedの文字(列)は unsigned char 型となる
uchar * uitodsz(uchar *str, unsigned int strlen, unsigned int val)
unsigned int 符号なし"0"付き10進数文字列変換
uchar * uitods(uchar *str, unsigned int strlen, unsigned int val)
unsigned int 10進数文字列変換
uchar * itods(uchar *str, unsigned int strlen, int val)
int 10進数文字列変換
uchar * itohs(uchar *str, unsigned int strlen, int val)
intを16進数字列変換
uchar * itodsz(uchar *str, unsigned int strlen, int val)
int "0"付き10進数文字列変換
unsigned int strleng(const uchar *str)
文字列長
uchar * lltods(uchar *str, unsigned int strlen, long long val)
long long 10進数文字列変換
uchar * str2cap(uchar *str)
小文字から大文字へ変換
uchar * lltodsz(uchar *str, unsigned int strlen, long long val)
long long 10進数文字列変換
uchar * lltohs(uchar *str, unsigned int strlen, long long val)
long long 16進数字列変換
uchar * ulltods(uchar *str, unsigned int strlen, unsigned long long val)
unsigned long long 10進数文字列変換
int vtprintf(io_write write, const char *fmt, unsigned int size, va_list args)
簡易printf、float,doubleは使えない
uchar * ulltodsz(uchar *str, unsigned int strlen, unsigned long long val)
unsigned long long 符号なし"0"付き10進数文字列変換