FirmAE
FirmAE copied to clipboard
Make Some Changes in firmae.config can make FirmAE Faster when facing a firmware image cannot be emulated.
First, thx for FirmAE tool. Very Useful. Then, I find a problem when facing a firmware image cannot be emulated, FirmAE will enter an infinite loop in firmae.config code. Details below. There is a "check_network" function in firmae.config.
while [ ${CURRENT_TIME} -le $[${START_TIME} + ${CHECK_TIMEOUT}] ]
do
for IP in "${IPS[@]}"
do
if (curl --max-time 2 --output /dev/null --silent http://${IP} || curl --max-time 2 --output /dev/null --silent https://${IP}); then
t_end="$(date -u +%s.%N)"
if (! ${WEB_RESULT}); then
WEB_TIME="$(bc <<< "$t_end-$t_start")"
fi
if (! ${PING_RESULT}); then
PING_TIME=${WEB_TIME}
fi
PING_RESULT=true
WEB_RESULT=true
RET_IP=${IP}
fi
if (ping -c 1 ${IP} > /dev/null); then
t_end="$(date -u +%s.%N)"
if (! ${PING_RESULT}); then
PING_TIME="$(bc <<< "$t_end-$t_start")"
fi
PING_RESULT=true
RET_IP=${IP}
fi
sleep 1
CURRENT_TIME=$(date +%s | bc)
done
if (${WEB_RESULT}); then
break
fi
done
When the ${IPS[@]} is empty, IP is NONE and the for-loop will not be executed. So the CURRENT_TIME will always equals START_TIME. Therefore, the WHILE will be an infinite-loop and never break. So the simple solution put the code out of the FOR-loop and in the WHILE-loop.
while [ ${CURRENT_TIME} -le $[${START_TIME} + ${CHECK_TIMEOUT}] ]
do
CURRENT_TIME=$(date +%s | bc)
......
done
Waiting 4 reply. Thx Again~.