This commit is contained in:
iceman1001 2017-06-09 14:49:35 +02:00
commit de048b0436
17 changed files with 447 additions and 409 deletions

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
# .gitignore
# don't push these files to the repository
.idea
.history
*.log
*.eml

View file

@ -1,23 +1,21 @@
The iceman fork
===============
[![Build Status](https://travis-ci.org/iceman1001/proxmark3.svg?branch=master)](https://travis-ci.org/iceman1001/proxmark3) [![Coverity Status](https://scan.coverity.com/projects/5117/badge.svg)](https://scan.coverity.com/projects/proxmark3_iceman_fork) [![Latest release] (https://img.shields.io/github/release/iceman1001/proxmark3.svg)](https://github.com/iceman1001/proxmark3/releases/latest)
[![Build Status](https://travis-ci.org/iceman1001/proxmark3.svg?branch=master)](https://travis-ci.org/iceman1001/proxmark3)[![Coverity Status](https://scan.coverity.com/projects/5117/badge.svg)](https://scan.coverity.com/project/proxmark3_iceman_fork)[![Latest release](https://img.shields.io/github/release/iceman1001/proxmark3.svg)](https://github.com/iceman1001/proxmark3/releases/latest)
##This fork is HIGHLY experimental (or bleeding edge)
##Donate
## This fork is HIGHLY experimental and bleeding edge
## Donate
https://paypal.me/iceman1001/
Feel free to donate. All support is welcome.
##Notice
## Notice
There is so much in this fork, with all fixes and additions its basically the most enhanced fork to this day for the Proxmark3 device. Which makes it so awesum to play with. Do please play with it. Get excited and experiment. As a side note with all coverity scan fixes this client is much more stable than PM3 Master even if I tend to break it sometimes. I'll try to make a release when this fork becomes stable between my experiments.
##Official
The official Proxmark repository is found here: https://github.com/Proxmark/proxmark3
##Coverity Scan Config & Run
## Coverity Scan Config & Run
Download the Coverity Scan Self-buld and install it.
You will need to configure ARM-NON-EABI- Compiler for it to use:
```
- Configure
`cov-configure --comptype gcc --compiler /opt/devkitpro/devkitARM/bin/arm-none-eabi-gcc`
@ -28,8 +26,9 @@ You will need to configure ARM-NON-EABI- Compiler for it to use:
`tar czvf proxmark3.tgz cov-int`
- upload it to coverity.com
```
##Whats changed?
## Whats changed?
Whats so special with this fork? I have scraped the web for different enhancements to the PM3 source code and not all of them ever found their way to the master branch.
Among the stuff is
@ -56,24 +55,24 @@ Among the stuff is
* Aczid's bitsliced bruteforce solver in 'hf mf hardnested'
---
##Why don't you merged with offical PM3 Master?
## Why don't you merged with offical PM3 Master?
I don't actually know how to make small pull-request to github :( and that is the number one reason for me not pushing a lot of things back to the PM3 master.
Me fiddling with the code so much, there is a nightmare in merging a PR. Luckily I have @marshmellow42 who takes some stuff and push PR's back.
##Why don't you add nnnn or mmmm functionality?
## Why don't you add this or that functionality?
Give me a hint, and I'll see if I can't merge in the stuff you have.
##PM3 GUI
## PM3 GUI
I do tend to rename and move stuff around, the official PM3-GUI from Gaucho will not work so well. *sorry*
##Development
## Development
This fork now compiles just fine on
- Windows/mingw environment with Qt5.6.1 & GCC 4.8
- Ubuntu 1404, 1510, 1604
- Mac OS X / Homebrew
- Docker container
##Setup and build for UBUNTU
## Setup and build for UBUNTU
GC made updates to allow this to build easily on Ubuntu 14.04.2 LTS, 15.10 or 16.04
See https://github.com/Proxmark/proxmark3/wiki/Ubuntu%20Linux
@ -110,7 +109,7 @@ https://github.com/daveio/attacksurface/blob/master/proxmark3/pm3-setup.sh
- Run the client
`./proxmark3 /dev/ttyACM0`
##Homebrew (Mac OS X)
## Homebrew (Mac OS X)
These instructions comes from @Chrisfu, where I got the proxmark3.rb scriptfile from.
Further questions about Mac & Homebrew, contact @Chrisfu (https://github.com/chrisfu/)
@ -120,13 +119,13 @@ Further questions about Mac & Homebrew, contact @Chrisfu (https://github.com/c
3. Install Proxmark3: `brew install proxmark3` for stable release or `brew install --HEAD proxmark3` for latest non-stable from GitHub.
##Docker container
## Docker container
I recently added a docker container on Docker HUB. You find it here: https://hub.docker.com/r/iceman1001/proxmark3/
Follow those instructions to get it up and running. No need for the old proxspace-environment anymore.
[1.6.0] How to start: https://www.youtube.com/watch?v=b5Zta89Cf6Q
[1.6.0] How to connect: https://youtu.be/0ZS2t5C-caI
[1.6.1] How to flash: https://www.youtube.com/watch?v=WXouhuGYEiw
-[1.6.0] How to start: https://www.youtube.com/watch?v=b5Zta89Cf6Q
-[1.6.0] How to connect: https://youtu.be/0ZS2t5C-caI
-[1.6.1] How to flash: https://www.youtube.com/watch?v=WXouhuGYEiw
Recommendations: Use only latest container.
@ -206,40 +205,21 @@ Assuming you have Proxmark3 Windows drivers installed you can run the Proxmark s
- Run the client
`proxmark3.exe comX`
##Buying a proxmark3
## Buying a proxmark3
The Proxmark 3 device is available for purchase (assembled and tested) from the following locations:
* http://proxmark3.tictail.com/ (For buyers in EU, most likely in Sweden)
* http://www.elechouse.com/ (new and revised hardware package 2015, located in China)
Enjoy!
##Enjoy
January 2015, Sweden
iceman at host iuse.se
January 2015, Sweden
##Note from Jonathan Westhues
Most of the ultra-low-volume contract assemblers could put
something like this together with a reasonable yield. A run of around
a dozen units is probably cost-effective. The BOM includes (possibly-
outdated) component pricing, and everything is available from Digikey
and the usual distributors.
If you've never assembled a modern circuit board by hand, then this is
not a good place to start. Some of the components (e.g. the crystals)
must not be assembled with a soldering iron, and require hot air.
The schematics are included; the component values given are not
necessarily correct for all situations, but it should be possible to do
nearly anything you would want with appropriate population options.
The printed circuit board artwork is also available, as Gerbers and an
Excellon drill file.
## Note from Jonathan Westhues
LICENSING:

View file

@ -1,17 +1,27 @@
os: Windows Server 2012
platform: mingw
qt: mingw492_32
version: 1.0.{build}
environment:
global:
CYG_ROOT: C:\cygwin
CYG_MIRROR: http://cygwin.mirror.constant.com
CYG_CACHE: C:\cygwin\var\cache\setup
CYG_BASH: C:\cygwin\bin\bash
branches:
only:
- master
install:
- set QTDIR=C:\Qt\5.5\mingw492_32
- set PATH=%PATH%;%QTDIR%\bin;C:\MinGW\bin
before_build:
- make clean
build:
- make all
init:
- cmd:
- set QTDIR=C:\Qt\5.5\mingw492_32
- set PATH=%PATH%;%QTDIR%\bin;C:\MinGW\bin;C:\MinGW\msys\1.0\bin
- c:\cygwin\setup-x86.exe --quiet-mode --no-shortcuts --only-site --root "%CYG_ROOT%" --site "%CYG_MIRROR%" --local-package-dir "%CYG_CACHE%" --packages autoconf,automake,bison,gcc-core,gcc-g++,mingw-runtime,mingw-binutils,mingw-gcc-core,mingw-gcc-g++,mingw-pthreads,mingw-w32api,libtool,make,gettext-devel,gettext,intltool,libiconv,pkg-config,git,curl,libxslt,libreadline-devel,libreadline7 > NUL 2>&1'
- '%CYG_BASH% -lc "cygcheck -dc cygwin"'
- if not exist "make.zip" curl -L -o make.zip http://gnuwin32.sourceforge.net/downlinks/make-bin-zip.php
- if not exist "make-dep.zip" curl -L -o make-dep.zip http://gnuwin32.sourceforge.net/downlinks/make-dep-zip.php
- if not exist "gcc-arm-none-eabi.zip" curl -L -o gcc-arm-none-eabi.zip https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q1-update/+download/gcc-arm-none-eabi-4_8-2014q1-20140314-win32.zip
- if not exist "C:\strawberry" cinst strawberryperl #once I workout how to install Digest::SHA for perl, this won't be required
- set PATH=C:\strawberry\perl\bin;C:\strawberry\perl\site\bin;C:\strawberry\c\bin;%PATH%
- unzip -o -q gcc-arm-none-eabi.zip -d c:\gcc\
- unzip make.zip -d c:\gnuwin32\
- unzip make-dep.zip -d c:\gnuwin32\
- set PATH=C:\Program Files\git\bin;%PATH:C:\Program Files\git\bin;=% #move git to begining of PATH so find works correctly
- set PATH=%PATH%;c:\gnuwin32\bin;c:\gcc\bin
- set PATH=%PATH%;c:\gcc\bin
build_script:
- cmd: make all

View file

@ -153,20 +153,20 @@ void FpgaSetupSsc(void) {
//-----------------------------------------------------------------------------
bool FpgaSetupSscDma(uint8_t *buf, int len) {
if (buf == NULL) return false;
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS; // Disable DMA Transfer
AT91C_BASE_PDC_SSC->PDC_RPR = (uint32_t) buf; // transfer to this memory address
AT91C_BASE_PDC_SSC->PDC_RCR = len; // transfer this many bytes
AT91C_BASE_PDC_SSC->PDC_RNPR = (uint32_t) buf; // next transfer to same memory address
AT91C_BASE_PDC_SSC->PDC_RNCR = len; // ... with same number of bytes
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTEN; // go!
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTEN; // go!
return true;
}
//----------------------------------------------------------------------------
// Uncompress (inflate) the FPGA data. Returns one decompressed byte with
// each call.
// each call.
//----------------------------------------------------------------------------
static int get_from_fpga_combined_stream(z_streamp compressed_fpga_stream, uint8_t *output_buffer)
{
@ -184,7 +184,7 @@ static int get_from_fpga_combined_stream(z_streamp compressed_fpga_stream, uint8
}
++uncompressed_bytes_cnt;
return *fpga_image_ptr++;
}
@ -200,7 +200,7 @@ static int get_from_fpga_stream(int bitstream_version, z_streamp compressed_fpga
get_from_fpga_combined_stream(compressed_fpga_stream, output_buffer);
}
return get_from_fpga_combined_stream(compressed_fpga_stream, output_buffer);
return get_from_fpga_combined_stream(compressed_fpga_stream, output_buffer);
}
@ -218,14 +218,14 @@ static void fpga_inflate_free(voidpf opaque, voidpf address)
//----------------------------------------------------------------------------
// Initialize decompression of the respective (HF or LF) FPGA stream
// Initialize decompression of the respective (HF or LF) FPGA stream
//----------------------------------------------------------------------------
static bool reset_fpga_stream(int bitstream_version, z_streamp compressed_fpga_stream, uint8_t *output_buffer)
{
uint8_t header[FPGA_BITSTREAM_FIXED_HEADER_SIZE];
uncompressed_bytes_cnt = 0;
// initialize z_stream structure for inflate:
compressed_fpga_stream->next_in = &_binary_obj_fpga_all_bit_z_start;
compressed_fpga_stream->avail_in = &_binary_obj_fpga_all_bit_z_start - &_binary_obj_fpga_all_bit_z_end;
@ -240,7 +240,7 @@ static bool reset_fpga_stream(int bitstream_version, z_streamp compressed_fpga_s
for (uint16_t i = 0; i < FPGA_BITSTREAM_FIXED_HEADER_SIZE; i++)
header[i] = get_from_fpga_stream(bitstream_version, compressed_fpga_stream, output_buffer);
// Check for a valid .bit file (starts with _bitparse_fixed_header)
if(memcmp(_bitparse_fixed_header, header, FPGA_BITSTREAM_FIXED_HEADER_SIZE) == 0)
return true;
@ -324,7 +324,7 @@ static void DownloadFPGA(int bitstream_version, int FpgaImageLen, z_streamp comp
}
DownloadFPGA_byte(b);
}
// continue to clock FPGA until ready signal goes high
i=100000;
while ( (i--) && ( !(AT91C_BASE_PIOA->PIO_PDSR & GPIO_FPGA_DONE ) ) ) {
@ -396,21 +396,21 @@ static int bitparse_find_section(int bitstream_version, char section_name, unsig
//----------------------------------------------------------------------------
// Check which FPGA image is currently loaded (if any). If necessary
// Check which FPGA image is currently loaded (if any). If necessary
// decompress and load the correct (HF or LF) image to the FPGA
//----------------------------------------------------------------------------
void FpgaDownloadAndGo(int bitstream_version)
{
z_stream compressed_fpga_stream;
uint8_t output_buffer[OUTPUT_BUFFER_LEN] = {0x00};
// check whether or not the bitstream is already loaded
if (downloaded_bitstream == bitstream_version)
return;
// make sure that we have enough memory to decompress
BigBuf_free(); BigBuf_Clear_ext(false);
if (!reset_fpga_stream(bitstream_version, &compressed_fpga_stream, output_buffer)) {
return;
}
@ -422,14 +422,14 @@ void FpgaDownloadAndGo(int bitstream_version)
}
inflateEnd(&compressed_fpga_stream);
// free eventually allocated BigBuf memory
BigBuf_free(); BigBuf_Clear_ext(false);
}
}
//-----------------------------------------------------------------------------
// Gather version information from FPGA image. Needs to decompress the begin
// Gather version information from FPGA image. Needs to decompress the begin
// of the respective (HF or LF) image.
// Note: decompression makes use of (i.e. overwrites) BigBuf[]. It is therefore
// advisable to call this only once and store the results for later use.
@ -440,7 +440,7 @@ void FpgaGatherVersion(int bitstream_version, char *dst, int len)
char tempstr[40] = {0x00};
z_stream compressed_fpga_stream;
uint8_t output_buffer[OUTPUT_BUFFER_LEN] = {0x00};
dst[0] = '\0';
// ensure that we can allocate enough memory for decompression:
@ -492,7 +492,7 @@ void FpgaGatherVersion(int bitstream_version, char *dst, int len)
}
strncat(dst, tempstr, len-1);
}
strncat(dst, "\n", len-1);
inflateEnd(&compressed_fpga_stream);

View file

@ -7,7 +7,7 @@ include ../common/Makefile.common
CC = gcc
CXX = g++
COMMON_FLAGS += -std=c99 -O3 -mpopcnt -march=native -g
COMMON_FLAGS += -std=c99 -O3 -g
#VPATH = ../common ../zlib
OBJDIR = obj
@ -20,7 +20,7 @@ LUAPLATFORM = generic
ifneq (,$(findstring MINGW,$(platform)))
LDLIBS += -L/mingw/lib -lgdi32
CFLAGS += -I/mingw/include -D__USE_MINGW_ANSI_STDIO=1
CFLAGS += -I/mingw/include -D__USE_MINGW_ANSI_STDIO=1 -march=x86-64
CXXFLAGS = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui
MOC = $(QTDIR)/bin/moc
LUAPLATFORM = mingw
@ -46,7 +46,8 @@ else ifeq ($(platform),Darwin)
# OS X, QT5 detection needs this.
export PKG_CONFIG_PATH=/usr/local/Cellar/qt5/5.6.1-1/lib/pkgconfig/
CXXFLAGS = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) -Wall -O3
CFLAGS += -march=native
CXXFLAGS = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) -Wall -O3
QTLDLIBS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null)
MOC = $(shell pkg-config --variable=moc_location QtCore)
@ -64,6 +65,7 @@ else ifeq ($(platform),Darwin)
LUAPLATFORM = macosx
else
CFLAGS += -march=native
CXXFLAGS = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) -Wall -O3
QTLDLIBS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null)
LUALIB += -ldl

View file

@ -834,9 +834,9 @@ int CmdHFiClassReader_Dump(const char *Cmd) {
ul_switch_off_field();
memset(MAC,0,4);
// AA2 authenticate credit key and git c_div_key - later store in dump block 4
if (!select_and_auth(CreditKEY, MAC, c_div_key, true, false, false, false)){
if (!select_and_auth(CreditKEY, MAC, c_div_key, true, elite, rawkey, false)){
//try twice - for some reason it sometimes fails the first time...
if (!select_and_auth(CreditKEY, MAC, c_div_key, true, false, false, false)){
if (!select_and_auth(CreditKEY, MAC, c_div_key, true, elite, rawkey, false)){
ul_switch_off_field();
return 0;
}

View file

@ -24,8 +24,8 @@ int usage_legic_calccrc(void){
PrintAndLog(" c <8|16> : Crc type");
PrintAndLog("");
PrintAndLog("Samples:");
PrintAndLog(" hf legic crc b deadbeef1122");
PrintAndLog(" hf legic crc b deadbeef1122 u 9A c 16");
PrintAndLog(" hf legic crc d deadbeef1122");
PrintAndLog(" hf legic crc d deadbeef1122 u 9A c 16");
return 0;
}
int usage_legic_rdmem(void){
@ -678,8 +678,8 @@ int CmdLegicCalcCrc(const char *Cmd){
while(param_getchar(Cmd, cmdp) != 0x00) {
switch(param_getchar(Cmd, cmdp)) {
case 'b':
case 'B':
case 'd':
case 'D':
// peek at length of the input string so we can
// figure out how many elements to malloc in "data"
bg=en=0;
@ -1274,4 +1274,4 @@ int CmdHFLegic(const char *Cmd) {
int CmdHelp(const char *Cmd) {
CmdsHelp(CommandTable);
return 0;
}
}

View file

@ -1081,7 +1081,7 @@ int CmdHF14AMfChk(const char *Cmd) {
char filename[FILE_PATH_SIZE]={0};
char buf[13];
uint8_t *keyBlock = NULL, *p;
uint8_t stKeyBlock = 20;
uint16_t stKeyBlock = 20;
sector_t *e_sector = NULL;

View file

@ -1431,7 +1431,7 @@ static const uint64_t crack_states_bitsliced(statelist_t *p){
#endif
if ( !lstate_p ) {
__sync_fetch_and_add(&total_states_tested, bucket_states_tested);
__atomic_fetch_add(&total_states_tested, bucket_states_tested, __ATOMIC_SEQ_CST);
return key;
}
@ -1618,7 +1618,7 @@ out:
#endif
}
__sync_fetch_and_add(&total_states_tested, bucket_states_tested);
__atomic_fetch_add(&total_states_tested, bucket_states_tested, __ATOMIC_SEQ_CST);
return key;
}
@ -1636,8 +1636,8 @@ static void* crack_states_thread(void* x){
if (keys_found) break;
else if(key != -1) {
if (TestIfKeyExists(key)) {
__sync_fetch_and_add(&keys_found, 1);
__sync_fetch_and_add(&foundkey, key);
__atomic_fetch_add(&keys_found, 1, __ATOMIC_SEQ_CST);
__atomic_fetch_add(&foundkey, key, __ATOMIC_SEQ_CST);
printf("*");
fflush(stdout);
break;

View file

@ -235,8 +235,8 @@ c2b7ec7d4eb1,
003003003003,
#
# Data from: http://phreakerclub.com/forum/showthread.php?p=41266
26973ea74321,
71f3a315ad26,
26973ea74321,
71f3a315ad26,
51044efb5aab,
ac70ca327a04,
eb0a8ff88ade,
@ -279,7 +279,7 @@ a7abbc77cc9e,
f792c4c76a5c,
bfb6796a11db,
#
# Data from
# Data from
8829da9daf76,
#
# Data from Salto A/B
@ -290,7 +290,7 @@ bfb6796a11db,
2338b4913111,
#
# Data from stoye
cb779c50e1bd,
cb779c50e1bd,
a27d3804c259,
003cc420001a,
f9861526130f,
@ -316,4 +316,38 @@ d9a37831dce5,
c5cfe06d9ea3,
c0dece673829,
#
a56c2df9a26d,
a56c2df9a26d,
#
# Data from: https://pastebin.com/vbwast74
#
2031d1e57a3b,
68d3f7307c89,
9189449ea24e,
568c9083f71c,
53c11f90822a,
# Vigik Keys
# Various sources :
# * https://github.com/DumpDos/Vigik
# * http://newffr.com/viewtopic.php?&forum=235&topic=11559
# * Own dumps
021209197591,
22729a9bd40f,
2ef720f2af76,
38fcf33072e0,
424c41524f4e,
484558414354,
49fae4e3849f,
4a6352684677,
509359f131b1,
62d0c424ed8e,
66d2b7dc39ef,
6bc1e1ae547d,
6c78928e1317,
89347350bd36,
8ad5517b4b18,
8fa1d601d0a2,
a22ae129c013,
a6cac2886412,
aa0720018738,
e64a986a5d94,
bf1f4424af76,

View file

@ -4,6 +4,8 @@
000D8787,
# ref. http://kazus.ru/forums/showpost.php?p=1045937&postcount=77
05D73B9F,
# ref. http://www.proxmark.org/forum/viewtopic.php?=
89A69E60,
# Default pwd, simple:
00000000,
11111111,

View file

@ -242,6 +242,7 @@ static void set_my_executable_path(void)
my_executable_path[path_length] = '\0';
my_executable_directory = (char *)malloc(dirname_length + 2);
strncpy(my_executable_directory, my_executable_path, dirname_length+1);
my_executable_directory[dirname_length+1] = '\0';
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -534,9 +534,11 @@ void xor(unsigned char * dst, unsigned char * src, size_t len) {
int32_t le24toh (uint8_t data[3]) {
return (data[2] << 16) | (data[1] << 8) | data[0];
}
#ifndef ANDROID
uint32_t le32toh (uint8_t *data) {
return (uint32_t)( (data[3]<<24) | (data[2]<<16) | (data[1]<<8) | data[0]);
}
#endif
// Pack a bitarray into a uint32_t.
uint32_t PackBits(uint8_t start, uint8_t len, uint8_t* bits) {

View file

@ -31,6 +31,10 @@
#include <windows.h>
#endif
#ifdef ANDROID
#include <endian.h>
#endif
#ifndef BITMASK
# define BITMASK(X) (1 << (X))
@ -146,7 +150,9 @@ extern void wiegand_add_parity(uint8_t *target, uint8_t *source, uint8_t length)
extern void xor(unsigned char * dst, unsigned char * src, size_t len);
extern int32_t le24toh (uint8_t data[3]);
#ifndef ANDROID
extern uint32_t le32toh (uint8_t *data);
#endif
extern uint32_t PackBits(uint8_t start, uint8_t len, uint8_t* bits);
extern void rol(uint8_t *data, const size_t len);
extern uint32_t SwapBits(uint32_t value, int nrbits);

View file

@ -65,8 +65,8 @@ endif
# uncomment these two; to fix 256 vs 512kb PM3 devices
# flashing bootrom -b is needed
APP_CFLAGS += -DHAS_512_FLASH
COMMON_FLAGS += -DHAS_512_FLASH
#APP_CFLAGS += -DHAS_512_FLASH
#COMMON_FLAGS += -DHAS_512_FLASH
# Also search prerequisites in the common directory (for usb.c), the fpga directory (for fpga.bit), and the zlib directory
VPATH = . ../common ../fpga ../zlib
@ -99,7 +99,7 @@ $(VERSIONOBJ): $(OBJDIR)/%.o: %.c $(INCLUDES)
# See ldscript.common. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27
OBJCOPY_TRANSLATIONS = --no-change-warnings \
--change-addresses -0x100000 --change-start 0 \
--change-section-address .bss+0 --change-section-address .data+0 \
--change-section-address .bss+0 --change-section-address .data-0x100000 \
--change-section-address .commonarea+0
$(OBJDIR)/%.s19: $(OBJDIR)/%.elf
$(OBJCOPY) -Osrec --srec-forceS3 --strip-debug $(OBJCOPY_TRANSLATIONS) $^ $@

View file

@ -199,7 +199,7 @@ static void buffreplace (LexState *ls, char from, char to) {
#if ANDROID
#define getlocaldecpoint() '.'
#define getlocaledecpoint() '.'
#elif !defined(getlocaledecpoint)
#define getlocaledecpoint() (localeconv()->decimal_point[0])
#endif