GithubHelp home page GithubHelp logo

Comments (3)

arizvisa avatar arizvisa commented on July 17, 2024

Okay. You caught me. I was being lazy and didn't want to implement the decoding of all the available strtypes since db.get.string() works regardless of whether a string is defined at the address or not and lets you specify the length too.

The reason why idaapi.get_strlit_contents(ea, idaapi.get_item_size(ea), idaapi.get_str_type(ea)) never made it into db.get.string is because it actually utf8 encodes utf-16le (or any mbcs really). This changes the bytes in the actual string when really it should return it as a unicode type. So to preserve those bytes, I always just used .rstrip() and then .decode() on all the strings I read from a database.

An example of this utf8-encoding on a utf-16le string (IDA 7.1.180227): 9a 3f 43 56 4f 54 57 3e 43 62 00 00

Python>repr(idaapi.get_strlit_contents(h(), idaapi.get_item_size(h()), idaapi.get_str_type(h())))
'\xe3\xbe\x9a\xe5\x99\x83\xe5\x91\x8f\xe3\xb9\x97\xe6\x89\x83'

But then with db.get.string(), if you process it you get the following correct string.

Python>repr(db.get.string().decode('utf-16le'))
u'\u3f9a\u5643\u544f\u3e57\u6243\x00'

I just didn't want to implement all of the ASCSTR types, but I guess I will.

Since you're only using C-style strings, you can put something like the following in your ~/.idapythonrc.py until I get it done.

db.get.string = staticmethod(fcompose(db.get.string, operator.methodcaller('rstrip')))

from ida-minsc.

arizvisa avatar arizvisa commented on July 17, 2024

@x0rloser, PR #21 should fix this. I submitted the PR for review, then I reviewed my own code and realized that I'm just so awesome and so I merged it upstream because I'm always right and of course it fixes the issue...so, yeah...

Anyways, you should just need to do a git pull to re-sync, and you should be good to go. It supports the other stuff without needing UTF-8 like I mentioned. If that didn't fix it for you for some reason or there's some particular case I missed, just re-open this issue and lmk.

Thanks for your contribution, sir

from ida-minsc.

x0rloser avatar x0rloser commented on July 17, 2024

can confirm is fixed (for C strings at least). awesomeness ftw ;)

from ida-minsc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.