使用ASM修改字符数组触发Access Violation,能否绕过该错误?
Absolutely—you can work around this access violation, but first we need to nail down why it’s happening. 9 times out of 10, this error pops up because the character array you’re trying to modify lives in a read-only memory segment (like the .text section, where compilers often store string constants, or a memory page marked as read-only by the OS).
Here’s how to fix it, step by step:
1. Verify the Memory Segment’s Permissions
First, confirm the issue in OllyDbg:
- Right-click the problematic address
[ADDR]in the CPU window. - Hover over Memory → Open Memory Window.
- Look at the "Access" column for that memory page. If it says
R(read-only) instead ofRW(read-write), that’s your culprit.
2. Modify Memory Permissions Temporarily (Debugging Only)
If you just need to patch it for debugging, OllyDbg lets you tweak memory access directly:
- In the Memory Window, right-click the target page.
- Select Set memory access → Check the Write box and click OK.
- Now you can run your ASM write instruction without the access violation.
3. Permanently Fix It via ASM Code
If you want your patch to work outside the debugger, use the Windows VirtualProtect API to change permissions at runtime. Add this code before your write operation:
; Set [ADDR]'s memory page to read-write push PAGE_READWRITE ; New protection flag (0x4) push 0x1000 ; Size of the memory page (adjust if needed) push [ADDR] ; Starting address of the target memory call VirtualProtect ; Windows API to modify memory protection
After modifying the character, you can even reset the permissions back to read-only if you want to maintain security.
4. Alternative: Move the Character Array to a Writable Segment
If you control the original code (not just patching a binary), move the character array to a writable section like .data or .bss instead of leaving it in .text. For example:
; Instead of putting the string in .text (read-only) section .text db "Hello World", 0 ; Move it to .data (read-write) section .data my_string db "Hello World", 0
A Quick Heads-Up
- Be cautious with modifying memory permissions in production code—it can introduce security vulnerabilities if not handled properly.
- If you’re patching a program with anti-debugging or memory protection (like DEP), you might need additional steps to bypass those safeguards, but this basic workflow covers most common cases.
内容的提问来源于stack exchange,提问作者Hi_World

