当IDA pro7.0遇到mojave macOS多输入法时, 会crash

当IDA pro7.0遇到mojave多输入法时, 会crash

修复后文件链接, 同时修复了快捷键, 在非英文输入法下很多不可用的问题
https://github.com/fjh658/IDA7.0_SP

IDA has almost crashed!
现象:
多输入法, 在英文状态可以正常启动, 在非英文状态会crash
这里写图片描述

7.0使用的是Qt 5.6的环境

crash堆栈:

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x00003eadde8f1958
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [13886]  

Application Specific Information:
objc_msgSend() selector name: length

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib               	0x00007fff686faa1d objc_msgSend + 29
1   org.qt-project.QtCore         	0x0000000101903924 QT::QCFString::toQString(__CFString const*) + 52
2   libqcocoa.dylib               	0x0000000103508f67 0x1034c0000 + 298855

原因:

    TISInputSourceRef source = TISCopyCurrentKeyboardInputSource();
    CFArrayRef languages = (CFArrayRef) TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages);
    if (CFArrayGetCount(languages) > 0) {
        CFStringRef langRef = (CFStringRef)CFArrayGetValueAtIndex(languages, 0);
        QString name = QCFString::toQString(langRef);
        QLocale locale(name);
        if (m_locale != locale) {
            m_locale = locale;
            emitLocaleChanged();
        }
        CFRelease(langRef);
    }

langRef 野指针导致

修复:

void QCocoaInputContext::updateLocale()
{
    /* https://bugreports.qt.io/browse/QTBUG-48772

    TISInputSourceRef source = TISCopyCurrentKeyboardInputSource();
    CFArrayRef languages = (CFArrayRef) TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages);
    if (CFArrayGetCount(languages) > 0) {
        CFStringRef langRef = (CFStringRef)CFArrayGetValueAtIndex(languages, 0);
        QString name = QCFString::toQString(langRef);
        QLocale locale(name);
        if (m_locale != locale) {
            m_locale = locale;
            emitLocaleChanged();
        }
        CFRelease(langRef);
    }
    
    */

    QString name = QString::fromNSString([[NSLocale currentLocale] objectForKey:NSLocaleIdentifier]);
    QLocale locale(name);
    if (m_locale != locale) {
        m_locale = locale;
        emitLocaleChanged();
    }
}

重新编译下Qt 5.6即可.

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux是一个非常流行的操作系统,而IDA Pro 7.0是一款著名的反汇编工具。这两者之间的结合可以提供强大的分析和调试功能,让开发者能够更深入地了解二进制文件的结构和功能,以便更好地进行漏洞分析、逆向工程、威胁情报等方面的工作。 借助于Linux的优点,如开源、强大的网络功能、优秀的安全性能等,开发者可以更加自由地使用和运行IDA Pro 7.0,进行各种尝试和实验。同,Linux与IDA Pro 7.0的结合还可以提供更高效的反汇编速度和更好的代码分析和重构功能,使得开发者可以更准确地理解和掌握二进制文件中的代码。 总之,Linux IDA Pro 7.0是一个非常有用的工具组合,可以大大提高开发者的反汇编和分析效率,帮助他们更好地应对日益严峻的安全威胁。无论是在企业应用还是个人项目中,Linux IDA Pro 7.0都是一个非常值得推荐的选择。 ### 回答2: Linux是一种开源操作系统,IDA Pro 7.0是一种专业的逆向工程软件。这两个工具可以在一起使用,帮助安全研究人员、代码审计人员以及黑客等在安全领域中发挥出色的作用。 Linux的开放性使得其具有高度的自由度,用户可以自由配置、自定义和修改其软件。这使得Linux成为更加适合逆向工程和黑客使用的操作系统之一。同IDA Pro 7.0作为一种高端的反汇编和调试软件,可以帮助用户深入挖掘目标程序的代码逻辑,理解并分析其算法、数据结构等。 使用Linux系统进行逆向工程可以带来很多优势,比如更高的自由度、更多的调试细节控制、更广泛的工具选择等等。此外,IDA Pro 7.0在Linux上也拥有很好的运行性能,并且常常被用于Linux平台上的逆向工程。 总之,Linux和IDA Pro 7.0的结合为安全研究人员提供了一个强大和自由的工具链,可以帮助他们更好地挖掘程序的内部细节和漏洞,更好地保护计算机安全。 ### 回答3: Linux是一种自由和开放源代码的操作系统,它很受程序员们的欢迎,因为它有许多适合程序员使用的工具和软件。其中一个应用广泛的软件是IDA Pro 7.0,它是一款可执行文件反汇编和静态分析的高级工具。因此,IDA Pro 7.0在Linux系统上的应用非常有用。 首先,IDA Pro 7.0在Linux平台上具有广泛的应用,它可以帮助程序员对应用程序、驱动程序和操作系统进行逆向分析,从而进行软件漏洞分析和加固。因为IDA Pro 7.0有专业级的反汇编、静态分析及交互式调试功能,所以对于安全专家或黑客来说它是一种必备工具。 其次,IDA Pro 7.0在Linux系统上具有良好的兼容性,即使在不同的Linux发行版上也能够正常运行。它还支持多种操作系统和平台,包括Windows、Mac OS X、iOS、Android等,可以帮助开发者在各种环境下快速进行开发和调试。 此外,IDA Pro 7.0在Linux系统上具有良好的性能和可靠性。因为Linux是一种高效、稳定和安全的操作系统,而IDA Pro 7.0又是一款高级软件,所以在Linux系统上它可以高效地运行,而且是目前最为可靠的反汇编和逆向分析软件之一。 综上所述,Linux和IDA Pro 7.0是一对非常有用的组合。通过它们的结合,程序员可以更快、更精确地完成开发和反汇编工作,而且在安全领域也可以发挥出更强大的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值