mirror of
https://github.com/Proxmark/proxmark3.git
synced 2024-09-21 07:16:24 +08:00
Fix printdemodbuffer length tests + add length...
parameter increase askdemod MaxBits fix util.c sprint_bin_break and increase buffer size (had memory overflow possible before)
This commit is contained in:
parent
51923aca85
commit
ace26dbdfd
|
@ -58,11 +58,12 @@ int CmdSetDebugMode(const char *Cmd)
|
|||
}
|
||||
|
||||
int usage_data_printdemodbuf(){
|
||||
PrintAndLog("Usage: data printdemodbuffer x o <offset>");
|
||||
PrintAndLog("Usage: data printdemodbuffer x o <offset> l <length>");
|
||||
PrintAndLog("Options: ");
|
||||
PrintAndLog(" h This help");
|
||||
PrintAndLog(" x output in hex (omit for binary output)");
|
||||
PrintAndLog(" o <offset> enter offset in # of bits");
|
||||
PrintAndLog(" l <length> enter length to print in # of bits or hex characters respectively");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -87,7 +88,8 @@ int CmdPrintDemodBuff(const char *Cmd)
|
|||
char hex[512]={0x00};
|
||||
bool hexMode = false;
|
||||
bool errors = false;
|
||||
uint8_t offset = 0;
|
||||
uint32_t offset = 0; //could be size_t but no param_get16...
|
||||
uint32_t length = 512;
|
||||
char cmdp = 0;
|
||||
while(param_getchar(Cmd, cmdp) != 0x00)
|
||||
{
|
||||
|
@ -103,10 +105,16 @@ int CmdPrintDemodBuff(const char *Cmd)
|
|||
break;
|
||||
case 'o':
|
||||
case 'O':
|
||||
offset = param_get8(Cmd, cmdp+1);
|
||||
offset = param_get32ex(Cmd, cmdp+1, 0, 10);
|
||||
if (!offset) errors = true;
|
||||
cmdp += 2;
|
||||
break;
|
||||
case 'l':
|
||||
case 'L':
|
||||
length = param_get32ex(Cmd, cmdp+1, 512, 10);
|
||||
if (!length) errors = true;
|
||||
cmdp += 2;
|
||||
break;
|
||||
default:
|
||||
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
|
||||
errors = true;
|
||||
|
@ -116,11 +124,12 @@ int CmdPrintDemodBuff(const char *Cmd)
|
|||
}
|
||||
//Validations
|
||||
if(errors) return usage_data_printdemodbuf();
|
||||
|
||||
int numBits = (DemodBufferLen-offset) & 0x7FC; //make sure we don't exceed our string
|
||||
length = (length > (DemodBufferLen-offset)) ? DemodBufferLen-offset : length;
|
||||
int numBits = (length) & 0x00FFC; //make sure we don't exceed our string
|
||||
|
||||
if (hexMode){
|
||||
char *buf = (char *) (DemodBuffer + offset);
|
||||
numBits = (numBits > sizeof(hex)) ? sizeof(hex) : numBits;
|
||||
numBits = binarraytohex(hex, buf, numBits);
|
||||
if (numBits==0) return 0;
|
||||
PrintAndLog("DemodBuffer: %s",hex);
|
||||
|
@ -313,7 +322,7 @@ int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType)
|
|||
char amp = param_getchar(Cmd, 0);
|
||||
uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
|
||||
sscanf(Cmd, "%i %i %i %i %c", &clk, &invert, &maxErr, &maxLen, &);
|
||||
if (!maxLen) maxLen = 512*64;
|
||||
if (!maxLen) maxLen = BIGBUF_SIZE;
|
||||
if (invert != 0 && invert != 1) {
|
||||
PrintAndLog("Invalid argument: %s", Cmd);
|
||||
return 0;
|
||||
|
@ -2383,7 +2392,7 @@ static command_t CommandTable[] =
|
|||
{"manrawdecode", Cmdmandecoderaw, 1, "[invert] [maxErr] -- Manchester decode binary stream in DemodBuffer"},
|
||||
{"norm", CmdNorm, 1, "Normalize max/min to +/-128"},
|
||||
{"plot", CmdPlot, 1, "Show graph window (hit 'h' in window for keystroke help)"},
|
||||
{"printdemodbuffer",CmdPrintDemodBuff, 1, "[x] [o] <offset> -- print the data in the DemodBuffer - 'x' for hex output"},
|
||||
{"printdemodbuffer",CmdPrintDemodBuff, 1, "[x] [o] <offset> [l] <length> -- print the data in the DemodBuffer - 'x' for hex output"},
|
||||
{"pskindalademod", CmdIndalaDecode, 1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
|
||||
{"psknexwatchdemod",CmdPSKNexWatch, 1, "Demodulate a NexWatch tag (nexkey, quadrakey) (PSK1) from GraphBuffer"},
|
||||
{"rawdemod", CmdRawDemod, 1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},
|
||||
|
|
|
@ -9,11 +9,13 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "util.h"
|
||||
#define MAX_BIN_BREAK_LENGTH (3072+384+1)
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
|
||||
int ukbhit(void)
|
||||
{
|
||||
int cnt = 0;
|
||||
|
@ -123,16 +125,25 @@ char *sprint_hex(const uint8_t *data, const size_t len) {
|
|||
}
|
||||
|
||||
char *sprint_bin_break(const uint8_t *data, const size_t len, const uint8_t breaks) {
|
||||
|
||||
int maxLen = ( len > 1020) ? 1020 : len;
|
||||
static char buf[1024];
|
||||
memset(buf, 0x00, 1024);
|
||||
// make sure we don't go beyond our char array memory
|
||||
int max_len = ( len+(len/breaks) > MAX_BIN_BREAK_LENGTH ) ? MAX_BIN_BREAK_LENGTH : len+(len/breaks);
|
||||
static char buf[MAX_BIN_BREAK_LENGTH]; // 3072 + end of line characters if broken at 8 bits
|
||||
//clear memory
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
char *tmp = buf;
|
||||
|
||||
for (size_t i=0; i < maxLen; ++i){
|
||||
sprintf(tmp++, "%u", data[i]);
|
||||
if (breaks > 0 && !((i+1) % breaks))
|
||||
size_t in_index = 0;
|
||||
// loop through the out_index to make sure we don't go too far
|
||||
for (size_t out_index=0; out_index < max_len; out_index++) {
|
||||
// set character
|
||||
sprintf(tmp++, "%u", data[in_index]);
|
||||
// check if a line break is needed
|
||||
if ( (breaks > 0) && !((in_index+1) % breaks) && (out_index+1 != max_len) ) {
|
||||
// increment and print line break
|
||||
out_index++;
|
||||
sprintf(tmp++, "%s","\n");
|
||||
}
|
||||
in_index++;
|
||||
}
|
||||
|
||||
return buf;
|
||||
|
|
|
@ -300,7 +300,7 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
|
|||
uint8_t midBit = 0;
|
||||
uint8_t tol = 0; //clock tolerance adjust - waves will be accepted as within the clock if they fall + or - this value + clock from last valid wave
|
||||
if (*clk <= 32) tol = 1; //clock tolerance may not be needed anymore currently set to + or - 1 but could be increased for poor waves or removed entirely
|
||||
size_t MaxBits = 1024;
|
||||
size_t MaxBits = 3072;
|
||||
lastBit = start - *clk;
|
||||
|
||||
for (i = start; i < *size; ++i) {
|
||||
|
|
Loading…
Reference in a new issue