最近阅读kprobe的内核代码,目标指令被替换为brk指令;这个过程需要刷新cache,从代码中没能理解背后的原理。最近找到一篇文章给出的一些相关的解释,非常受用。
源文链接:https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/caches-and-self-modifying-code
The processor can only execute instructions that are in the I-cache and can only see data that are in the D-cache.
Generally, it cannot directly access memory. we cannot directly write into I-cache(or into memory).
CPU执行的指令来自I-cache,但是我们不能从I-cache读或者向其写数据;
![](data:image/png;base64,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**YttZbP7wWMFDWkD8Nn82zHLRWiGAe7/wMUobHqAK9Xdm433WRgjrFOwk7gph48ZrWgqChJ8lJU+E+8zO4wd3EH1wPxa42OO/7/HvUYVGpuH+hTz25B+naiJMf+/2Ddx9yB9ABACeoOMgjFf78b/g8Xrh1PUSbF3uwNqgZeaIXbt2YdfOrXj3xSF4/u3P8bSqA54CE9bKzR0CMHf8Ig3AzgbT2D66YtNh1tiaygoU52YiJHAl1Kf8zPb/URNnsnH71nixaUXvAdfV1uDvP4qwZWMIdGaqop9yL7z84deoFNzfEUhQXYov3hkGHm8Ajl28LwhlP8tLS1AjsmxdW12J4wU5WB8cAC21CexF7CffT2bTmqiPAY/XD/nn+KtYzJL52X/4s1shgPsMxamr/GXpnCNbWJt153mhuvQWXuvHw5DXP0E4cz7u2gVrHf4FyOrwODGb6KBtChCARQAclnyMVa3q3j8Y1E+ZBTATcOvin9DRnIqXnh/CdkYGxsNf/xTnbz1BSwB2C9op9IIAwDMdBFCuwQ+fMle0/CXo/RsXsmUvDNgrzCO60xqAHQ0nsMtKMdmNy1P50RvZMg0c/IUA7vP+CGGxYavc2HhJAL56IokdPF79dDRKRWBX9fg6PnjtJfwyTQ+VdUDWkR14eSizJNUf7374CUZ+8SlbJgPg66f4v77024z5wjpFdwQAFn0IS/2n/7H5T1wtQcgCS3Z/2CuvsT8Sw/xQDLt9OQb3yhrvE4uWqUj7BGDueFMigJkZ4S/MQ1BK2J16EuVPbmLi6M/ZPvvyq29i3I8/oA+PB2kAZlbXzKaPZ2fJL7z0Cr4dMw7P9+8rGcCow+zfmKVjHjZECR7EZPSph6+dLt794CNEZ51EZel9aP7CXxYf/srrGPfTj+jH40EAYO0JzPk1BMcvSZqxNt4DFjyElRu7ja1Tx3YhKh9dZCcbffoPFD8f33sPvlsiueMsObKEANwKgGuryhCxIwx7DsWh5PED5GUlQ2X8KLZTbtqf0SKAl2xohOmp+F1snskGzmz3qC2/hw9eHCQEcHHsDjZe1cSN333qa2E+/Vf8qjILNx5VoDUAb17uyOYXfSJzjTt/yStge6zMAK6rLseEb95jBxe7xQF4WlGFsqePYG/EX2JWMWbaUQvNcZ+C13sw4vL/ZpeFlzkasXYwAC67dwHPKfPw5uc/o4J9aA3Y6OuEUeN+Qcax88IlaGkAjtrky5blvmYXq0lV2SOE79iOs/9cpSVoGQcZwU9R0g9xyChcQ/KmAGYenkqNCsOgvr0w9LVPcLukEknhAWx/nWnjhfKKatz/p5CFqzQAXymKZdOPnKyLJ0/LUf3kJl57foAUAAPxO/zZi+L3PhuB4+eusJYVpkZi2JDe6D34Rfx59SHyD4eyZU4xdERpeRUqb/3F3k4TANjNhJmxKmFrbCGbv+zueXzy4cdw8F7duAQt8hS0KIBrq57gk+H98eIHI1DSsEZemBGP5PRsPHlKvw/wLD2LANwKgGsqHmPUf16FUp8BmGvnjsCAlfjy47fQq88g5P59E3UVt/GyMg8DXnobKwOCcf1+qfAesCiA710oxIBePAx8/nUsWe6PWaq/YEA/5qEj/gy4pvwRvv3oNSj3Gwgbx4Vwt7NAP2UlfP2rFqrr6rFhkS3/.*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**RIgOWvTClHRIAIEAEi0AsIkAD3gkIiE4kAESACRED+CJAAy1+ZUo6IABEgAkSgFxAgAe4FhUQmEgEiQASIgPwRIAGWvzKlHBEBIkAEiEAvIEAC3AsKiUwkAkSACBAB+SPAE+ChQ4di2rRpdBADqgNUB6gOUB2gOtDFdeC1117DqFGjoMD+pyDc15TZf5QOYkB1gOoA1QGqA1QHurYOMNr7/yDGnm7k4a40AAAAAElFTkSuQmCC)
当数据cache中指令被修改后,场景如下:
The solution
如何更新I-cache,只有以一种方法:
The data must move to the external memory and then into the I-cache from here.
In order to execute the new instruction, we need to tell the processor that the content of the I-cache are stale and need to be re-loaded from memory. We do this by invalidating the instructions in the I-cache. The result will look like this:
为了执行新指令,我们需要告诉处理器I-cache的内容已经过期,需要从内存中重新加载。我们通过使I-cache中的指令无效来实现这一点。结果如下所示:
If you now attempt to run the code you have written out to memory, the instruction fetch will miss in the I-cache and the processor will have to get the new version from memory. The result is that your newly-emitted code gets executed, as you intended.
如果您现在尝试运行已写入内存的代码,则I-cache中的指令取回将会丢失,处理器将不得不从内存中获取新版本。结果是执行了新发出的代码,正如您预期的那样。
阅读(727) | 评论(0) | 转发(0) |