diff --git a/ai/ai.js b/ai/ai.js index 13ae385b065d8e8a4b80e5b5f1c81f9c4a4db035..501d3c6edbb865385bd926b523b38d222a81ca57 100644 --- a/ai/ai.js +++ b/ai/ai.js @@ -115,7 +115,7 @@ function diagnosis(dirPath, filePath, session_id, data) { // 文件存在时,调用算法库,获取诊断结果 const mainExePath = path.join(__dirname, '..', 'bin', 'main.exe'); let command = `"${mainExePath.replace(/\\/g, "/")}" --db_path "${filePath.replace(/\\/g, "/")}"${str}`; - exec(command, {encoding: 'buffer'}, (error, stdout, stderr) => { + exec(command, {encoding: 'buffer',maxBuffer: 1024 * 1024 * 500}, (error, stdout, stderr) => { if (error || (stderr && stderr.length > 0)) { message.code = 1; message.message = `error: ${error ? error.message : stderr.toString()}`; diff --git a/app.js b/app.js index 609cbaa93d86ae0416a97ea31105abafd7f3a1e4..46e7db509db8798d5da047fc639e0135aec0b258 100644 --- a/app.js +++ b/app.js @@ -88,6 +88,9 @@ wss.on('connection', function connection(ws) { // 当发生错误时触发 ws.on('error', function error(err) { + if(err.code === 'EADDRINUSE') { + logger.err(`Port ${Utils.AuthMsg.SW_PORT} is occupied`); + } logger.error(`Connection error:${err}`); }); }) diff --git a/disassembly/disassembly.js b/disassembly/disassembly.js index 7a79d60fda9663a13fac0d4c61c43fb74b38fdc3..b78b44b9b022fae5ac3f6edd00a86d7fc668bb43 100644 --- a/disassembly/disassembly.js +++ b/disassembly/disassembly.js @@ -24,6 +24,7 @@ const SAVE_CMD = 1; // {file_name:str, buffer:str, buffer_size:num, tota const SAVE_BACK_CMD = 2; // {result:num, msg:str} const QUERY_CMD = 3; // {elf_name:str, vaddr:str, func:str} const QUERY_BACK_CMD = 4; // {result:num, msg:str} +const DISASSEMBLY_QUERY_ELF_CMD = 5;// {elf_name:str, vaddr:str, func:str} const logger = winston.createLogger(require('./../winston.config.js')); const decoder = new TextDecoder('utf-8'); // 'utf-8' 是常见的字符编码 @@ -55,9 +56,40 @@ function process(session_id, cmd, data) { save(session_id, data); } else if (cmd === QUERY_CMD) { queryData(session_id, data); + } else if (cmd === DISASSEMBLY_QUERY_ELF_CMD) { + checkElf(session_id, data); } } +/** + * 搜索so/an文件 + */ +function checkElf(session_id, data) { + const decodedData = decoder.decode(data); + const jsonData = JSON.parse(decodedData); + let { elf_name, vaddr, func } = jsonData; + if (elf_name.endsWith('.an')) { + let anFilePath = path.join(TEMP_DIR, `session_${session_id}`, elf_name); + if (!fs.existsSync(anFilePath)) { + const msg = `FileNotFoundError: please import "${elf_name}"`; + logger.error('error:' + msg); + sendMsg(session_id, DISASSEMBLY_QUERY_ELF_CMD, { code: 1, message: msg }); + return; + } else { + sendMsg(session_id, DISASSEMBLY_QUERY_ELF_CMD, { code: 0, message: 'OK' }); + } + } else { + let soInfoTxt = path.join(TEMP_DIR, `session_${session_id}`, `${elf_name.replace('.', '_')}.txt`); + if (!fs.existsSync(soInfoTxt)) { + const msg = `FileNotFoundError: please import "${elf_name}"`; + logger.error('error:' + msg); + sendMsg(session_id, DISASSEMBLY_QUERY_ELF_CMD, { code: 1, message: msg }); + return; + } else { + sendMsg(session_id, DISASSEMBLY_QUERY_ELF_CMD, { code: 0, message: 'OK' }); + } + } +} /** * 写入ELF文件 */ @@ -282,23 +314,28 @@ function queryData(session_id, data) { let resultString = ''; let addrArray = []; rl.on('line', (line) => { - if (isInTargetRange) { - if (line.startsWith(prefix)) { - isInTargetRange = false; - rl.close(); - } else if (line.trim() !== '') { - let addr = line.split(`:`)[0].replace(/\s+/g, ''); - let instruction = line.split(`:`)[1]; - instruction = instruction.substring(instruction.indexOf(' ')); - instruction = instruction.replace(/\s+/g, ' ').trimStart().trimEnd(); - addrArray.push("0x"+addr) - resultString += `{\"addr\":\"0x${addr}\", \"instruction\":\"${instruction}\"},`; + try { + if (isInTargetRange) { + if (line.startsWith(prefix)) { + isInTargetRange = false; + rl.close(); + } else if (line.trim() !== '') { + let addr = line.split(`:`)[0].replace(/\s+/g, ''); + let instruction = line.split(`:`)[1]; + instruction = instruction.substring(instruction.indexOf(' ')); + instruction = instruction.replace(/\s+/g, ' ').trimStart().trimEnd(); + addrArray.push("0x" + addr) + resultString += `{\"addr\":\"0x${addr}\", \"instruction\":\"${instruction}\"},`; + } } - } - if (!isInTargetRange && line.startsWith(target)) { - isInTargetRange = true; + if (!isInTargetRange && line.startsWith(target)) { + isInTargetRange = true; + } + } catch (error) { + const errMsg = `Reading failed.Error):[${error.message}]`; } + }); rl.on('close', async () => { diff --git a/version.js b/version.js index 0ca4ca8b056e064b126651b35a63fcdc52705713..b67bf7a43daeb1ec9de6d0414fd30586c16b3b3a 100644 --- a/version.js +++ b/version.js @@ -13,7 +13,7 @@ * limitations under the License. */ class version { - static version = '1.1.0'; //版本号 + static version = '1.1.1'; //版本号 } module.exports = {